summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Yang <liezhi.yang@windriver.com>2019-08-22 12:24:40 +0800
committerRobert Yang <liezhi.yang@windriver.com>2019-08-22 14:53:25 +0800
commitd0e866d6640d5b834a6a48247642165e610f4a08 (patch)
tree0f5674fffd2691788ac6acdf34999512849a50a8
parent58ab85d3e005476ab5bcc288ad421c0c5d1e0582 (diff)
downloadopenembedded-core-contrib-m5.tar.gz
openembedded-core-contrib-m5.tar.bz2
openembedded-core-contrib-m5.zip
bitbake: cooker: Kill alive process before join itm5
Fixed: $ echo helloworld >> meta/recipes-extended/bash/bash_4.4.18.bb $ while true; do kill-bb; rm -fr bitbake-cookerdaemon.log tmp/cache/default-glibc/qemux86-64/x86_64/bb_cache.dat* ; bitbake -p; done It may hang in 10 mins, there are two problems: * There might be deadlocks when call process.join() if the queue is not NULL, so we need cleanup the queue before join() it, but: * The self.result_queue.get(timeout=0.25) may hang if the queue._wlock is hold by SomeOtherProcess, the queue has the following info when it hangs: '_wlock': <Lock(owner=SomeOtherProcess)> We can kill alvie process before join it to fix the problems. Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
-rw-r--r--bitbake/lib/bb/cooker.py12
1 files changed, 4 insertions, 8 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 0607fcc708..e42bcbaedf 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -2082,19 +2082,15 @@ class CookerParser(object):
for process in self.processes:
self.parser_quit.put(None)
- # Cleanup the queue before call process.join(), otherwise there might be
- # deadlocks.
- while True:
- try:
- self.result_queue.get(timeout=0.25)
- except queue.Empty:
- break
-
for process in self.processes:
if force:
process.join(.1)
process.terminate()
else:
+ # Kill the alive process firstly before join() it to avoid
+ # deadlocks
+ if process.is_alive():
+ os.kill(process.pid, 9)
process.join()
sync = threading.Thread(target=self.bb_cache.sync)