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:15:07 +0100 |
| commit | 62c45ffbc7c239b6d50931a0fc46f9a67635b1b1 (patch) | |
| tree | 4dd13a84dc729a9b611eb04b2e793b36814a14d2 | |
| parent | b28e6d6039902f79e46a764035b09c642cb31143 (diff) | |
| download | poky-62c45ffbc7c239b6d50931a0fc46f9a67635b1b1.tar.gz | |
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]
(From OE-Core rev: 059d475b6bce1e5414170a4fe2e7989f6b0eacd6)
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): | |||
| 189 | if passed: | 189 | if passed: |
| 190 | local_log.results("Testcase "+str(test_case)+": PASSED") | 190 | local_log.results("Testcase "+str(test_case)+": PASSED") |
| 191 | 191 | ||
| 192 | # XXX: In order to avoid race condition when test if exists the linkfile | ||
| 193 | # use bb.utils.lock, the best solution is to create a unique name for the | ||
| 194 | # link file. | ||
| 195 | try: | ||
| 196 | import bb | ||
| 197 | has_bb = True | ||
| 198 | lockfilename = linkfile + '.lock' | ||
| 199 | except ImportError: | ||
| 200 | has_bb = False | ||
| 201 | |||
| 202 | if has_bb: | ||
| 203 | lf = bb.utils.lockfile(lockfilename, block=True) | ||
| 192 | # Create symlink to the current log | 204 | # Create symlink to the current log |
| 193 | if os.path.lexists(linkfile): | 205 | if os.path.lexists(linkfile): |
| 194 | os.remove(linkfile) | 206 | os.remove(linkfile) |
| 195 | os.symlink(logfile, linkfile) | 207 | os.symlink(logfile, linkfile) |
| 208 | if has_bb: | ||
| 209 | bb.utils.unlockfile(lf) | ||
| 196 | 210 | ||
| 197 | original_class.run = run | 211 | original_class.run = run |
| 198 | 212 | ||
