From: Aníbal Limón Date: Tue, 4 Oct 2016 16:45:53 +0000 (-0500) Subject: classes/sstate.bbclass: Enable thread lock when checkstatus X-Git-Tag: lucaceresoli/bug-15201-perf-libtraceevent-missing~23951 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e0bb9d141438c0051c32b0d3a247915b71ccb82;p=thirdparty%2Fopenembedded%2Fopenembedded-core-contrib.git classes/sstate.bbclass: Enable thread lock when checkstatus The checkstatus function fires an event to notify bitbake UI about the progress of the task, this function is implemented using ThreadPool and is causing event lose when multiple threads tries to fire an event (writes over socket/fd). [YOCTO #10330] Signed-off-by: Aníbal Limón Signed-off-by: Richard Purdie --- diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass index 6f0c791fe50..172384b3763 100644 --- a/meta/classes/sstate.bbclass +++ b/meta/classes/sstate.bbclass @@ -851,15 +851,19 @@ def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=False): if tasklist: bb.event.fire(bb.event.ProcessStarted("Checking sstate mirror object availability", len(tasklist)), d) + import multiprocessing nproc = min(multiprocessing.cpu_count(), len(tasklist)) + bb.event.enable_threadlock() pool = oe.utils.ThreadedPool(nproc, len(tasklist), worker_init=checkstatus_init, worker_end=checkstatus_end) for t in tasklist: pool.add_task(checkstatus, t) pool.start() pool.wait_completion() + bb.event.disable_threadlock() + bb.event.fire(bb.event.ProcessFinished("Checking sstate mirror object availability"), d) if whitelist and missing: bb.fatal('Required artifacts were unavailable - exiting')