1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-07 16:59:22 +00:00

sstate: Setup fetcher environment in advance

The threading code here can race as the fetcher changes the environment which is
shared between the threads. By setting it up in advance, it isn't changed and
therefore no longer races.

(From OE-Core rev: cabc3cc2eac5916e63340c18d1074411b377ced4)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2022-02-19 17:59:07 +00:00
parent 9477a309a8
commit f37af44f18
+12 -9
View File
@@ -1022,15 +1022,18 @@ def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True,
msg = "Checking sstate mirror object availability"
bb.event.fire(bb.event.ProcessStarted(msg, len(tasklist)), d)
bb.event.enable_threadlock()
pool = oe.utils.ThreadedPool(nproc, len(tasklist),
worker_init=checkstatus_init, worker_end=checkstatus_end,
name="sstate_checkhashes-")
for t in tasklist:
pool.add_task(checkstatus, t)
pool.start()
pool.wait_completion()
bb.event.disable_threadlock()
# Have to setup the fetcher environment here rather than in each thread as it would race
fetcherenv = bb.fetch2.get_fetcher_environment(d)
with bb.utils.environment(**fetcherenv):
bb.event.enable_threadlock()
pool = oe.utils.ThreadedPool(nproc, len(tasklist),
worker_init=checkstatus_init, worker_end=checkstatus_end,
name="sstate_checkhashes-")
for t in tasklist:
pool.add_task(checkstatus, t)
pool.start()
pool.wait_completion()
bb.event.disable_threadlock()
if progress:
bb.event.fire(bb.event.ProcessFinished(msg), d)