diff options
Diffstat (limited to 'meta/classes')
| -rw-r--r-- | meta/classes/sstate.bbclass | 8 | ||||
| -rw-r--r-- | meta/classes/staging.bbclass | 6 |
2 files changed, 8 insertions, 6 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) |
diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass index 806a85773a..32a615c743 100644 --- a/meta/classes/staging.bbclass +++ b/meta/classes/staging.bbclass | |||
| @@ -409,7 +409,7 @@ python extend_recipe_sysroot() { | |||
| 409 | if os.path.islink(f) and not os.path.exists(f): | 409 | if os.path.islink(f) and not os.path.exists(f): |
| 410 | bb.note("%s no longer exists, removing from sysroot" % f) | 410 | bb.note("%s no longer exists, removing from sysroot" % f) |
| 411 | lnk = os.readlink(f.replace(".complete", "")) | 411 | lnk = os.readlink(f.replace(".complete", "")) |
| 412 | sstate_clean_manifest(depdir + "/" + lnk, d, workdir) | 412 | sstate_clean_manifest(depdir + "/" + lnk, d, canrace=True, prefix=workdir) |
| 413 | os.unlink(f) | 413 | os.unlink(f) |
| 414 | os.unlink(f.replace(".complete", "")) | 414 | os.unlink(f.replace(".complete", "")) |
| 415 | 415 | ||
| @@ -454,7 +454,7 @@ python extend_recipe_sysroot() { | |||
| 454 | fl = depdir + "/" + l | 454 | fl = depdir + "/" + l |
| 455 | bb.note("Task %s no longer depends on %s, removing from sysroot" % (mytaskname, l)) | 455 | bb.note("Task %s no longer depends on %s, removing from sysroot" % (mytaskname, l)) |
| 456 | lnk = os.readlink(fl) | 456 | lnk = os.readlink(fl) |
| 457 | sstate_clean_manifest(depdir + "/" + lnk, d, workdir) | 457 | sstate_clean_manifest(depdir + "/" + lnk, d, canrace=True, prefix=workdir) |
| 458 | os.unlink(fl) | 458 | os.unlink(fl) |
| 459 | os.unlink(fl + ".complete") | 459 | os.unlink(fl + ".complete") |
| 460 | 460 | ||
| @@ -475,7 +475,7 @@ python extend_recipe_sysroot() { | |||
| 475 | continue | 475 | continue |
| 476 | else: | 476 | else: |
| 477 | bb.note("%s exists in sysroot, but is stale (%s vs. %s), removing." % (c, lnk, c + "." + taskhash)) | 477 | bb.note("%s exists in sysroot, but is stale (%s vs. %s), removing." % (c, lnk, c + "." + taskhash)) |
| 478 | sstate_clean_manifest(depdir + "/" + lnk, d, workdir) | 478 | sstate_clean_manifest(depdir + "/" + lnk, d, canrace=True, prefix=workdir) |
| 479 | os.unlink(depdir + "/" + c) | 479 | os.unlink(depdir + "/" + c) |
| 480 | if os.path.lexists(depdir + "/" + c + ".complete"): | 480 | if os.path.lexists(depdir + "/" + c + ".complete"): |
| 481 | os.unlink(depdir + "/" + c + ".complete") | 481 | os.unlink(depdir + "/" + c + ".complete") |
