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.

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.
---
 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");

base-commit: 09a61a0a00d3036ebfbc2fbadb0ba3e10a778ff3
-- 
2.39.0

_______________________________________________
Libguestfs mailing list
Libguestfs@redhat.com
https://listman.redhat.com/mailman/listinfo/libguestfs

Reply via email to