On Fri, Jan 13, 2023 at 05:57:35AM +0000, Thomas Weißschuh wrote:
If all of the requested data has been read, the call to popen_close will close the scripts output pipe and on the next write a SIGPIPE is delivered. When the scripts inherited signalhandler is ignoring the singal, it won't be aborted by default.
s/scripts/script's/2
This happens in the test suite, as make 4.4 seems to ignore this signal. Therefore the executed scripts never stop and the testsuite never finishes.
That's a bug in make: https://savannah.gnu.org/bugs/index.php?63307 but one we may indeed need to work around (along with every other impacted program).
--- plugins/data/format.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/plugins/data/format.c b/plugins/data/format.c index 3667ead6790f..2319ea09475c 100644 --- a/plugins/data/format.c +++ b/plugins/data/format.c @@ -40,6 +40,7 @@ #include <stdarg.h> #include <string.h> #include <assert.h> +#include <signal.h>
#define NBDKIT_API_VERSION 2 #include <nbdkit-plugin.h> @@ -1951,6 +1952,9 @@ store_script_len (struct allocator *a, char buf[BUFSIZ]; size_t n;
+ /* Restore SIGPIPE back to SIG_DFL, since shell can't undo SIG_IGN */ + signal (SIGPIPE, SIG_DFL); + pp = popen (script, "r"); if (pp == NULL) { nbdkit_error ("popen: %m");
ACK from my end, even if make ends up fixing their regression. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org