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 threading
import multiprocessing import multiprocessing
import signal import signal
import atexit
from cStringIO import StringIO from cStringIO import StringIO
from contextlib import closing from contextlib import closing
import bb import bb
@ -1038,8 +1039,12 @@ class CookerParser(object):
self.task_queue.close() self.task_queue.close()
for process in self.processes: for process in self.processes:
process.join() process.join()
threading.Thread(target=self.bb_cache.sync).start() sync = threading.Thread(target=self.bb_cache.sync)
threading.Thread(target=bb.codeparser.parser_cache_save(self.cooker.configuration.data)).start() 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: if self.error > 0:
raise ParsingErrorsFound() raise ParsingErrorsFound()