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>
This commit is contained in:
Chris Larson 2010-11-23 11:46:49 -06:00 committed by Richard Purdie
parent f4a06aac98
commit 7a7e2f4e59
1 changed files with 7 additions and 2 deletions

View File

@ -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()