bitbake: fetch2: Abstract fetcher environment to a function

The changing of the environment inside the wget fetcher can race if
threading is used, such as with sstate in OE-Core. Abstract the function
so the environment can be correct before the function is called, removing
the race since the enviroment is then no longer changed.

(Bitbake rev: c73bb6023c73f003a160bb02aa4da1b580b86c23)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2022-02-19 17:57:10 +00:00
parent 2b427b9224
commit 8e71d0e21b
2 changed files with 12 additions and 8 deletions

View File

@@ -851,6 +851,17 @@ FETCH_EXPORT_VARS = ['HOME', 'PATH',
'AWS_SECRET_ACCESS_KEY',
'AWS_DEFAULT_REGION']
def get_fetcher_environment(d):
newenv = {}
origenv = d.getVar("BB_ORIGENV")
for name in bb.fetch2.FETCH_EXPORT_VARS:
value = d.getVar(name)
if not value and origenv:
value = origenv.getVar(name)
if value:
newenv[name] = value
return newenv
def runfetchcmd(cmd, d, quiet=False, cleanup=None, log=None, workdir=None):
"""
Run cmd returning the command output

View File

@@ -315,14 +315,7 @@ class Wget(FetchMethod):
# Avoid tramping the environment too much by using bb.utils.environment
# to scope the changes to the build_opener request, which is when the
# environment lookups happen.
newenv = {}
origenv = d.getVar("BB_ORIGENV")
for name in bb.fetch2.FETCH_EXPORT_VARS:
value = d.getVar(name)
if not value and origenv:
value = origenv.getVar(name)
if value:
newenv[name] = value
newenv = bb.fetch2.get_fetcher_environment(d)
with bb.utils.environment(**newenv):
import ssl