diff mbox series

[1/2] java-library.bbclass: resolve do_deletebinaries race condition

Message ID 20241118221532.2468927-1-stanley.stanton@taitcommunications.com
State New
Headers show
Series [1/2] java-library.bbclass: resolve do_deletebinaries race condition | expand

Commit Message

Stanley Stanton Nov. 18, 2024, 10:15 p.m. UTC
The do_deletebinaries task is attempting to delete directories created
and destroyed by other bitbake classes such as sstate.bbclass and
create-spdx-2.2.bbclass. If these classes remove their directories
before do_deletebinaries has a chance to delete them, but after they are
found, the following types of errors occur:

Log data follows:
| DEBUG: Executing shell function do_deletebinaries
| find: ‘/build/tmp/work/x86_64-linux/junit-native/3.8.2/sstate-build-create_spdx’: No such file or directory
| WARNING: exit code 1 from a shell command.

Rewrite do_deletebinaries such that it is explicitly not looking through
directories that are managed by other bitbake classes, to avoid this
race condition.

Suggested-by:  Douglas Royds <douglas.royds@taitcommunications.com>
Signed-off-by: Stanley Stanton <stanley.stanton@taitcommunications.com>
---
 classes/java-library.bbclass | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
diff mbox series

Patch

diff --git a/classes/java-library.bbclass b/classes/java-library.bbclass
index 67541d2..033d6d4 100644
--- a/classes/java-library.bbclass
+++ b/classes/java-library.bbclass
@@ -55,10 +55,9 @@  ALTJARFILENAMES = "${BPN}.jar"
 # Java "source" distributions often contain precompiled things
 # we want to delete first.
 do_deletebinaries() {
-  find ${WORKDIR} ! -path "${RECIPE_SYSROOT}/*" ! -path "${RECIPE_SYSROOT_NATIVE}/*" \
-                  -name "*.jar" -exec rm {} \;
-  find ${WORKDIR} ! -path "${RECIPE_SYSROOT}/*" ! -path "${RECIPE_SYSROOT_NATIVE}/*" \
-                  -name "*.class" -exec rm {} \;
+  dirs_to_search="$(find ${WORKDIR}/* -maxdepth 0 -type d | grep -Ev "recipe-sysroot|sstate|spdx")"
+  find $dirs_to_search -name "*.jar" -exec rm {} \;
+  find $dirs_to_search -name "*.class" -exec rm {} \;
 }
 
 addtask deletebinaries after do_unpack before do_patch