From 33318699bf1255aef0c6ee4863236d26d7b326ec Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 9 Aug 2021 20:11:41 +0100 Subject: [PATCH] server: Return from nbdkit_nanosleep early if the socket closes https://bugzilla.redhat.com/show_bug.cgi?id=1991652#c2 Reported-by: Ming Xie Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1991652 (cherry picked from commit 87a88f8c52a0d2fd392c35d37f8b048bcede1382) --- server/public.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/public.c b/server/public.c index 3362f1ab..4870e2d3 100644 --- a/server/public.c +++ b/server/public.c @@ -693,6 +693,8 @@ nbdkit_nanosleep (unsigned sec, unsigned nsec) * - the current connection is multi-threaded and another thread detects * NBD_CMD_DISC or a problem with the connection * - the input socket detects POLLRDHUP/POLLHUP/POLLERR + * - the input socket is invalid (POLLNVAL, probably closed by + * another thread) */ struct connection *conn = threadlocal_get_conn (); struct pollfd fds[] = { @@ -724,7 +726,8 @@ nbdkit_nanosleep (unsigned sec, unsigned nsec) */ assert (quit || (conn && conn->nworkers > 0 && connection_get_status () < 1) || - (conn && (fds[2].revents & (POLLRDHUP | POLLHUP | POLLERR)))); + (conn && (fds[2].revents & (POLLRDHUP | POLLHUP | POLLERR | + POLLNVAL)))); nbdkit_error ("aborting sleep to shut down"); errno = ESHUTDOWN; return -1; -- 2.31.1