summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Larson <chris_larson@mentor.com>2010-11-23 11:46:49 -0600
committerRichard Purdie <rpurdie@linux.intel.com>2011-01-04 14:46:44 +0000
commit7a7e2f4e59a076ce166da53af5d8bbec310b1665 (patch)
tree3afc07f4c048e22466acc622e8072562c9d047ef
parentf4a06aac980f73702a04d2c2f0728c09ebfb7786 (diff)
downloadopenembedded-core-7a7e2f4e59a076ce166da53af5d8bbec310b1665.tar.gz
openembedded-core-7a7e2f4e59a076ce166da53af5d8bbec310b1665.tar.bz2
openembedded-core-7a7e2f4e59a076ce166da53af5d8bbec310b1665.tar.xz
openembedded-core-7a7e2f4e59a076ce166da53af5d8bbec310b1665.zip
cooker: ensure that the cache sync completes
Without explicitly joining the thread, it's possible for the process to end (e.g. after a bitbake -p) and kill off the thread without waiting for it to exit cleanly. So, register the thread join with atexit. (Bitbake rev: 97ce57e6f860d3e6f34cc7a603ed1eeac4f423d3) Signed-off-by: Chris Larson <chris_larson@mentor.com> Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
-rw-r--r--bitbake/lib/bb/cooker.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 69098ccf9..0ed70f9bd 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -28,6 +28,7 @@ import sre_constants
import threading
import multiprocessing
import signal
+import atexit
from cStringIO import StringIO
from contextlib import closing
import bb
@@ -1038,8 +1039,12 @@ class CookerParser(object):
self.task_queue.close()
for process in self.processes:
process.join()
- threading.Thread(target=self.bb_cache.sync).start()
- threading.Thread(target=bb.codeparser.parser_cache_save(self.cooker.configuration.data)).start()
+ sync = threading.Thread(target=self.bb_cache.sync)
+ sync.start()
+ atexit.register(lambda: sync.join())
+ codesync = threading.Thread(target=bb.codeparser.parser_cache_save(self.cooker.configuration.data))
+ codesync.start()
+ atexit.register(lambda: codesync.join())
if self.error > 0:
raise ParsingErrorsFound()