summarylogtreecommitdiffstats
path: root/0001-data-don-t-ignore-SIGPIPE.patch
blob: dc17a5347b3ac9396b98b97962efa4d7afbe11d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
From e8f93ba5745823d82008941f524faaf97d2f438c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= <thomas@t-8ch.de>
Date: Fri, 13 Jan 2023 05:46:26 +0000
Subject: [nbdkit PATCH] data: don't ignore SIGPIPE
To: libguestfs@redhat.com, "Richard W.M. Jones" <rjones@redhat.com>

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