* [PATCH 0/1] Force to teminate the Parser process
@ 2012-05-23 9:40 Kang Kai
2012-05-23 9:40 ` [PATCH 1/1] cooker.py: terminate the Parser processes Kang Kai
0 siblings, 1 reply; 4+ messages in thread
From: Kang Kai @ 2012-05-23 9:40 UTC (permalink / raw)
To: richard.purdie, bitbake-devel; +Cc: Zhenfeng.Zhao
This patch is for 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.
The following changes since commit 3bf8069100e54153d13319dc32ca089327b6a139:
documentation/yocto-project-qs/yocto-project-qs.xml: added quotes (2012-05-01 21:00:36 +0100)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib kangkai/distro
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=kangkai/distro
Kang Kai (1):
cooker.py: terminate the Parser processes
bitbake/lib/bb/cooker.py | 9 ++++++---
1 files changed, 6 insertions(+), 3 deletions(-)
--
1.7.5.4
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH 1/1] cooker.py: terminate the Parser processes 2012-05-23 9:40 [PATCH 0/1] Force to teminate the Parser process Kang Kai @ 2012-05-23 9:40 ` Kang Kai 2012-05-23 15:34 ` Chris Larson 0 siblings, 1 reply; 4+ messages in thread From: Kang Kai @ 2012-05-23 9:40 UTC (permalink / raw) To: richard.purdie, bitbake-devel; +Cc: Zhenfeng.Zhao [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 <kai.kang@windriver.com> --- 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) -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/1] cooker.py: terminate the Parser processes 2012-05-23 9:40 ` [PATCH 1/1] cooker.py: terminate the Parser processes Kang Kai @ 2012-05-23 15:34 ` Chris Larson 2012-05-24 8:29 ` Kang Kai 0 siblings, 1 reply; 4+ messages in thread From: Chris Larson @ 2012-05-23 15:34 UTC (permalink / raw) To: Kang Kai; +Cc: bitbake-devel, Zhenfeng.Zhao terminate()'ing processes can corrupt any queues those processes have open, and thereby disrupt any pending log messages in the queues heading to the ui as a result. If that's not an issue here, so be it, but be aware of the issues -- we had to remove terminate() from the shutdown in the past due to this issue. On Wed, May 23, 2012 at 2:40 AM, Kang Kai <kai.kang@windriver.com> wrote: > [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 <kai.kang@windriver.com> > --- > 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) > -- > 1.7.5.4 > > > _______________________________________________ > bitbake-devel mailing list > bitbake-devel@lists.openembedded.org > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/bitbake-devel -- Christopher Larson clarson at kergoth dot com Founder - BitBake, OpenEmbedded, OpenZaurus Maintainer - Tslib Senior Software Engineer, Mentor Graphics ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/1] cooker.py: terminate the Parser processes 2012-05-23 15:34 ` Chris Larson @ 2012-05-24 8:29 ` Kang Kai 0 siblings, 0 replies; 4+ messages in thread From: Kang Kai @ 2012-05-24 8:29 UTC (permalink / raw) To: Chris Larson; +Cc: bitbake-devel, Zhenfeng.Zhao On 2012年05月23日 23:34, Chris Larson wrote: > terminate()'ing processes can corrupt any queues those processes have > open, and thereby disrupt any pending log messages in the queues > heading to the ui as a result. If that's not an issue here, so be it, > but be aware of the issues -- we had to remove terminate() from the > shutdown in the past due to this issue. Hi Chris, Call terminate() directly seems not be elegant. But I didn't figure out why after the queue belongs to Parse process calls cancel_join_thread(), so .. Before the terminate() the every Parse process, it is waited for 0.1 second to quit. If the process will not be blocked, I suppose that 0.1 second is enough for them to quit. What's your opinion? Thanks, Kai > > On Wed, May 23, 2012 at 2:40 AM, Kang Kai<kai.kang@windriver.com> wrote: >> [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<kai.kang@windriver.com> >> --- >> 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) >> -- >> 1.7.5.4 >> >> >> _______________________________________________ >> bitbake-devel mailing list >> bitbake-devel@lists.openembedded.org >> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/bitbake-devel > > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-05-24 8:39 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-05-23 9:40 [PATCH 0/1] Force to teminate the Parser process Kang Kai 2012-05-23 9:40 ` [PATCH 1/1] cooker.py: terminate the Parser processes Kang Kai 2012-05-23 15:34 ` Chris Larson 2012-05-24 8:29 ` Kang Kai
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.