diff options
Diffstat (limited to 'meta/classes/sstate.bbclass')
-rw-r--r-- | meta/classes/sstate.bbclass | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass index 72eebd70c9..6c8e64ed00 100644 --- a/meta/classes/sstate.bbclass +++ b/meta/classes/sstate.bbclass | |||
@@ -483,7 +483,7 @@ def sstate_clean_cachefiles(d): | |||
483 | ss = sstate_state_fromvars(ld, task) | 483 | ss = sstate_state_fromvars(ld, task) |
484 | sstate_clean_cachefile(ss, ld) | 484 | sstate_clean_cachefile(ss, ld) |
485 | 485 | ||
486 | def sstate_clean_manifest(manifest, d, prefix=None): | 486 | def sstate_clean_manifest(manifest, d, canrace=False, prefix=None): |
487 | import oe.path | 487 | import oe.path |
488 | 488 | ||
489 | mfile = open(manifest) | 489 | mfile = open(manifest) |
@@ -501,7 +501,9 @@ def sstate_clean_manifest(manifest, d, prefix=None): | |||
501 | if entry.endswith("/"): | 501 | if entry.endswith("/"): |
502 | if os.path.islink(entry[:-1]): | 502 | if os.path.islink(entry[:-1]): |
503 | os.remove(entry[:-1]) | 503 | os.remove(entry[:-1]) |
504 | elif os.path.exists(entry) and len(os.listdir(entry)) == 0: | 504 | elif os.path.exists(entry) and len(os.listdir(entry)) == 0 and not canrace: |
505 | # Removing directories whilst builds are in progress exposes a race. Only | ||
506 | # do it in contexts where it is safe to do so. | ||
505 | os.rmdir(entry[:-1]) | 507 | os.rmdir(entry[:-1]) |
506 | else: | 508 | else: |
507 | os.remove(entry) | 509 | os.remove(entry) |
@@ -539,7 +541,7 @@ def sstate_clean(ss, d): | |||
539 | for lock in ss['lockfiles']: | 541 | for lock in ss['lockfiles']: |
540 | locks.append(bb.utils.lockfile(lock)) | 542 | locks.append(bb.utils.lockfile(lock)) |
541 | 543 | ||
542 | sstate_clean_manifest(manifest, d) | 544 | sstate_clean_manifest(manifest, d, canrace=True) |
543 | 545 | ||
544 | for lock in locks: | 546 | for lock in locks: |
545 | bb.utils.unlockfile(lock) | 547 | bb.utils.unlockfile(lock) |