build: use a contextmanager for locks
Also don't bother passing logfile to exec_func_python, at least until we start adding the logfile as a file handler to the bitbake logger. (Bitbake rev: f99ee4680c9f67b7ed13fc06044ba2382f9a782c) Signed-off-by: Chris Larson <chris_larson@mentor.com> Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
This commit is contained in:
parent
b4eff9fcef
commit
e2363f3cdd
|
@ -25,13 +25,14 @@
|
|||
#
|
||||
#Based on functions from the base bb module, Copyright 2003 Holger Schurig
|
||||
|
||||
from bb import data, event, mkdirhier, utils
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
import bb
|
||||
import bb.utils
|
||||
import bb.process
|
||||
from contextlib import nested
|
||||
from bb import data, event, mkdirhier, utils
|
||||
|
||||
logger = logging.getLogger("BitBake.Build")
|
||||
|
||||
|
@ -142,26 +143,21 @@ def exec_func(func, d, dirs = None, logfile = NULL):
|
|||
if flags.get('fakeroot') and not flags.get('task'):
|
||||
bb.fatal("Function %s specifies fakeroot but isn't a task?!" % func)
|
||||
|
||||
lockflag = flags.get('lockfiles')
|
||||
if lockflag:
|
||||
lockfiles = [data.expand(f, d) for f in lockflag.split()]
|
||||
else:
|
||||
lockfiles = None
|
||||
|
||||
tempdir = data.getVar('T', d, 1)
|
||||
runfile = os.path.join(tempdir, 'run.{0}.{1}'.format(func, os.getpid()))
|
||||
|
||||
locks = []
|
||||
lockfiles = flags.get('lockfiles')
|
||||
if lockfiles:
|
||||
for lock in data.expand(lockfiles, d).split():
|
||||
locks.append(bb.utils.lockfile(lock))
|
||||
|
||||
try:
|
||||
with bb.utils.fileslocked(lockfiles):
|
||||
if ispython:
|
||||
exec_func_python(func, d, runfile, logfile, cwd=adir)
|
||||
else:
|
||||
exec_func_shell(func, d, runfile, logfile, cwd=adir)
|
||||
|
||||
finally:
|
||||
# Unlock any lockfiles
|
||||
for lock in locks:
|
||||
bb.utils.unlockfile(lock)
|
||||
|
||||
_functionfmt = """
|
||||
def {function}(d):
|
||||
{body}
|
||||
|
|
|
@ -26,6 +26,7 @@ import logging
|
|||
import bb
|
||||
import bb.msg
|
||||
from commands import getstatusoutput
|
||||
from contextlib import contextmanager
|
||||
|
||||
logger = logging.getLogger("BitBake.Util")
|
||||
|
||||
|
@ -398,6 +399,18 @@ def simple_exec(code, context):
|
|||
def better_eval(source, locals):
|
||||
return eval(source, _context, locals)
|
||||
|
||||
@contextmanager
|
||||
def fileslocked(files):
|
||||
locks = []
|
||||
if files:
|
||||
for lockfile in files:
|
||||
locks.append(bb.utils.lockfile(lock))
|
||||
|
||||
yield
|
||||
|
||||
for lock in locks:
|
||||
bb.utils.unlockfile(lock)
|
||||
|
||||
def lockfile(name):
|
||||
"""
|
||||
Use the file fn as a lock file, return when the lock has been acquired.
|
||||
|
|
Loading…
Reference in New Issue