@ -617,25 +617,27 @@ end
-- Background extraction management
function BookInfoManager : collectSubprocesses ( )
self.subprocesses_collector = nil
-- We need to regularly watch if a sub-process has terminated by
-- calling waitpid() so this process does not become a zombie hanging
-- around till we exit.
if # self.subprocesses_pids > 0 then
local i = 1
while i <= # self.subprocesses_pids do -- clean in-place
-- In-place removal, hence the reverse iteration.
for i = # self.subprocesses_pids , 1 , - 1 do
local pid = self.subprocesses_pids [ i ]
if FFIUtil.isSubProcessDone ( pid ) then
table.remove ( self.subprocesses_pids , i )
-- Prevent has been issued for each bg task spawn, we must allow for each death too.
UIManager : allowStandby ( )
else
i = i + 1
end
end
if # self.subprocesses_pids > 0 then
-- still some pids around, we'll need to collect again
self.subprocesses_collector = UIManager : scheduleIn (
self.subprocesses_collect_interval , function ( )
self.subprocesses_collector = true
UIManager : scheduleIn (
self.subprocesses_collect_interval ,
function ( )
self : collectSubprocesses ( )
end
)
@ -650,7 +652,6 @@ function BookInfoManager:collectSubprocesses()
-- we'll collect them next time we're run
end
else
self.subprocesses_collector = nil
if self.delayed_cleanup then
self.delayed_cleanup = false
-- No more subprocesses = no more crengine indexing, we can remove our
@ -661,7 +662,9 @@ function BookInfoManager:collectSubprocesses()
end
-- We're done, back to a single core
Device : enableCPUCores ( 1 )
if # self.subprocesses_pids == 0 then
Device : enableCPUCores ( 1 )
end
end
function BookInfoManager : terminateBackgroundJobs ( )
@ -722,8 +725,10 @@ function BookInfoManager:extractInBackground(files)
-- and fill linux processes table)
-- We set a single scheduled action for that
if not self.subprocesses_collector then -- there's not one already scheduled
self.subprocesses_collector = UIManager : scheduleIn (
self.subprocesses_collect_interval , function ( )
self.subprocesses_collector = true
UIManager : scheduleIn (
self.subprocesses_collect_interval ,
function ( )
self : collectSubprocesses ( )
end
)