[PATCH] find-debuginfo.sh: Exit with real exit status in parallel jobs

Mark Wielaard mark@klomp.org
Sat Aug 17 21:20:15 GMT 2024


Hi Keith,

On Fri, Aug 16, 2024 at 11:54:20AM -0700, Keith Seitz wrote:
> Currently, when the script is executed in parallel (-jN), the
> resulting exit status will always be 0.
> 
> The script execs an appropriate number of clones of itself, calling
> run_job to run the actual workload. This then calls do_file(), saving
> the exit status into "res.$jobid".
> 
> In do_file(), though, if an error occurs, exit is called. This causes
> the entire exec'd shell to exit with status 0 (since there are almost
> always echo calls as the last executed statement). The real exit
> status is therefor never written to the "res.$jobid" files by run_job().
> 
> The simple solution is to use 'return' instead of 'exit'. A number
> of minor adjustments are also made to propagate this properly so that
> it is reported as the correct exit status.

Good find. Code looks correct. Except don't we now also need to check
the result of do_file () in the non-parallel case? Something like:

diff --git a/scripts/find-debuginfo.in b/scripts/find-debuginfo.in
index f40e566f86c3..5998b9d1fa6c 100755
--- a/scripts/find-debuginfo.in
+++ b/scripts/find-debuginfo.in
@@ -579,6 +579,10 @@ fi
 if [ $n_jobs -le 1 ]; then
   while read nlinks inum f; do
     do_file "$nlinks" "$inum" "$f"
+    res=$?
+    if [ "$res" != "0" ]; then
+      exit $res
+    fi
   done <"$temp/primary"
 else
   for ((i = 1; i <= n_files; i++)); do

> While at it, I've incorporated a patch for find-debuginfo/30505.
> Using this patch and another patch to the RPM package (submitted as
> github issue #3215), failures of gdb-add-index.sh will now properly fail
> the build instead of being swallowed. It should be much easier for
> developers to figure out why their builds have failed should gdb crash.

Thanks, that has been a long standing issue.  Smart to introduce a new
_find_debuginfo_exit_on_error for rpm-config. The reason errors
weren't reported in the past was because people would then disable
creating debuginfo packages completely. But these days we really
should report (and fix) any errors.

There are a couple of other places, the main debugedit invocation,
strip_to_debug, add_minidebug, which really should report errors
too. But that can wait.

Thanks,

Mark


More information about the Debugedit mailing list