diff options
author | Aníbal Limón <anibal.limon@linux.intel.com> | 2016-09-13 15:25:42 -0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-09-15 12:14:40 +0100 |
commit | 059d475b6bce1e5414170a4fe2e7989f6b0eacd6 (patch) | |
tree | 1bfab53876b30fdb6e31115a8395262d520211b7 | |
parent | a378b817504986173c4b0984a28aead247589b3f (diff) | |
download | openembedded-core-059d475b6bce1e5414170a4fe2e7989f6b0eacd6.tar.gz openembedded-core-059d475b6bce1e5414170a4fe2e7989f6b0eacd6.tar.bz2 openembedded-core-059d475b6bce1e5414170a4fe2e7989f6b0eacd6.zip |
oeqa/utils/decorators: LogResults fix race condition in linkfile
In order to avoid race condition when test if exists the linkfile
use bb.utils.lock, the best solution is to create a unique name
for the link file.
There is no way to create a unique linkfile name at this decorator
because is needed the machine and image variables, those variables
can't be passed easily in this code.
To avoid broke test export functionality use a try/except because bb
isn't available when use test export
[YOCTO #10225]
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/lib/oeqa/utils/decorators.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/meta/lib/oeqa/utils/decorators.py b/meta/lib/oeqa/utils/decorators.py index 615fd956b5..25f9c54e6b 100644 --- a/meta/lib/oeqa/utils/decorators.py +++ b/meta/lib/oeqa/utils/decorators.py @@ -189,10 +189,24 @@ def LogResults(original_class): if passed: local_log.results("Testcase "+str(test_case)+": PASSED") + # XXX: In order to avoid race condition when test if exists the linkfile + # use bb.utils.lock, the best solution is to create a unique name for the + # link file. + try: + import bb + has_bb = True + lockfilename = linkfile + '.lock' + except ImportError: + has_bb = False + + if has_bb: + lf = bb.utils.lockfile(lockfilename, block=True) # Create symlink to the current log if os.path.lexists(linkfile): os.remove(linkfile) os.symlink(logfile, linkfile) + if has_bb: + bb.utils.unlockfile(lf) original_class.run = run |