From patchwork Wed May 23 09:40:19 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [bitbake-devel,1/1] cooker.py: terminate the Parser processes Date: Wed, 23 May 2012 09:40:19 -0000 From: Kang Kai X-Patchwork-Id: 28417 Message-Id: To: , Cc: Zhenfeng.Zhao@windriver.com [Yocto 2142] Force to exit HOB when hob is parsing recipes, the bitbake doesn't stop. It hangs on function BitBakeServerConnection::terminate in file server/process.py: else: self.procserver.join() It is waiting for the children process quit. In stage of parse recipes BBCooker spawns Parser processes as many as cpu numbers. When quit the Parser processes they make their internal Queue to call cancel_join_thread() to avoid block but don't work at this time. So force to terminate the Parser processes. Signed-off-by: Kang Kai --- bitbake/lib/bb/cooker.py | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index dea0aad..4a4dc38 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -1175,7 +1175,7 @@ class BBCooker: return if self.state in (state.shutdown, state.stop): - self.parser.shutdown(clean=False) + self.parser.shutdown(clean=False, force = True) sys.exit(1) if self.state != state.parsing: @@ -1608,10 +1608,13 @@ class CookerParser(object): self.parser_quit.put(None) self.jobs.cancel_join_thread() - sys.exit(1) for process in self.processes: - process.join() + if force: + process.join(.1) + process.terminate() + else: + process.join() self.feeder.join() sync = threading.Thread(target=self.bb_cache.sync)