From d8a32e84af6ad081fb7d6e31b1fc2fe0ffcbc86d Mon Sep 17 00:00:00 2001 From: "Evgeny Grin (Karlson2k)" Date: Mon, 30 Oct 2017 16:13:39 +0300 Subject: [PATCH] MHD_stop_daemon(): do not shutdown listen socket before setting shutdown flag --- src/microhttpd/daemon.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c index 7b651259..918ef4ad 100644 --- a/src/microhttpd/daemon.c +++ b/src/microhttpd/daemon.c @@ -6239,12 +6239,6 @@ MHD_stop_daemon (struct MHD_Daemon *daemon) else fd = daemon->listen_fd; - if (MHD_INVALID_SOCKET != fd) - { - (void) shutdown (fd, - SHUT_RDWR); - } - if (NULL != daemon->worker_pool) { /* Master daemon with worker pool. */ mhd_assert (1 < daemon->worker_pool_size); @@ -6262,6 +6256,13 @@ MHD_stop_daemon (struct MHD_Daemon *daemon) else mhd_assert (MHD_INVALID_SOCKET != fd); } +#ifdef HAVE_LISTEN_SHUTDOWN + if (MHD_INVALID_SOCKET != fd) + { + (void) shutdown (fd, + SHUT_RDWR); + } +#endif /* HAVE_LISTEN_SHUTDOWN */ for (i = 0; i < daemon->worker_pool_size; ++i) { MHD_stop_daemon (&daemon->worker_pool[i]); @@ -6292,7 +6293,18 @@ MHD_stop_daemon (struct MHD_Daemon *daemon) MHD_PANIC (_("Failed to signal shutdown via inter-thread communication channel")); } else - mhd_assert (MHD_INVALID_SOCKET != fd); + { +#ifdef HAVE_LISTEN_SHUTDOWN + if (MHD_INVALID_SOCKET != fd) + { + if (NULL == daemon->master) + (void) shutdown (fd, + SHUT_RDWR); + } + else +#endif /* HAVE_LISTEN_SHUTDOWN */ + mhd_assert (false); /* Should never happen */ + } if (! MHD_join_thread_ (daemon->pid.handle)) { @@ -6303,7 +6315,7 @@ MHD_stop_daemon (struct MHD_Daemon *daemon) } else { - /* Internal threads are not used polling sockets. */ + /* No internal threads are used for polling sockets. */ close_all_connections (daemon); } if (MHD_ITC_IS_VALID_ (daemon->itc))