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 };
+  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. */
-- 
2.40.1

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

Reply via email to