On 6/6/23 13:22, Richard W.M. Jones wrote:
 If the client (curl plugin) disconnects early then the whole test
can
 fail with SIGPIPE, and it can be unclear why the test failed -- you
 just get the mysterious error "FAIL test (exit status: 141)".  We
 always check the return code from write(2) so just report EPIPE
 failures through that.
 
 In addition, a future extension to this test will allow writes to fail
 with EPIPE in some circumstances.
 ---
  tests/web-server.c | 10 ++++++++++
  1 file changed, 10 insertions(+)
 
 diff --git a/tests/web-server.c b/tests/web-server.c
 index 9b37326c0..dbc8bc845 100644
 --- a/tests/web-server.c
 +++ b/tests/web-server.c
 @@ -43,6 +43,7 @@
  #include <fcntl.h>
  #include <unistd.h>
  #include <errno.h>
 +#include <signal.h>
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <sys/socket.h>
 @@ -90,6 +91,13 @@ cleanup (void)
    rmdir (tmpdir);
  }
  
 +static void
 +ignore_sigpipe (void)
 +{
 +  struct sigaction sa = { .sa_flags = SA_RESTART, .sa_handler = SIG_IGN }; 
SA_RESTART makes no difference when the disposition is SIG_IGN; I'd
rather remove SA_RESTART lest we imply otherwise.
With that:
Reviewed-by: Laszlo Ersek <lersek(a)redhat.com>
 +  sigaction (SIGPIPE, &sa, NULL);
 +}
 +
  const char *
  web_server (const char *filename, check_request_t _check_request)
  {
 @@ -97,6 +105,8 @@ web_server (const char *filename, check_request_t _check_request)
    pthread_t thread;
    int err;
  
 +  ignore_sigpipe ();
 +
    check_request = _check_request;
  
    /* Open the file. */