[Libguestfs] [nbdkit PATCH] data: don't ignore SIGPIPE

Thomas Weißschuh thomas at t-8ch.de
Mon Jan 16 22:23:05 UTC 2023


Jan 16, 2023 14:13:08 Eric Blake <eblake at redhat.com>:

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

Thanks for the pointer.

It also breaks the kernel build:
https://lore.kernel.org/lkml/CAPOgqxFva=tOuh1UitCSN38+28q3BNXKq19rEsVNPRzRqKqZ+g@mail.gmail.com/

>> ---
>> 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



More information about the Libguestfs mailing list