]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journal: make sure to set MHD_USE_PIPE_FOR_SHUTDOWN for libmicrohttpd servers 1429/head
authorLennart Poettering <lennart@poettering.net>
Wed, 30 Sep 2015 21:49:26 +0000 (23:49 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 30 Sep 2015 21:59:06 +0000 (23:59 +0200)
This makes sure libmicrohttpd won't call shutdown() on our listening
sockets, which make sure socket activation and re-activation will work
cleanly.

See:

https://github.com/systemd/systemd/pull/1286
https://lists.gnu.org/archive/html/libmicrohttpd/2015-09/msg00014.html

Fixes #1286

src/journal-remote/journal-gatewayd.c
src/journal-remote/journal-remote.c

index 29df842277a8dcb3c4dda98048072002760da7c4..b839e5979b1deb9234c30a97d347dc4e6b4847b8 100644 (file)
@@ -1010,7 +1010,22 @@ int main(int argc, char *argv[]) {
                         { MHD_OPTION_END, 0, NULL },
                         { MHD_OPTION_END, 0, NULL }};
                 int opts_pos = 2;
-                int flags = MHD_USE_THREAD_PER_CONNECTION|MHD_USE_POLL|MHD_USE_DEBUG;
+
+                /* We force MHD_USE_PIPE_FOR_SHUTDOWN here, in order
+                 * to make sure libmicrohttpd doesn't use shutdown()
+                 * on our listening socket, which would break socket
+                 * re-activation. See
+                 *
+                 * https://lists.gnu.org/archive/html/libmicrohttpd/2015-09/msg00014.html
+                 * https://github.com/systemd/systemd/pull/1286
+                 */
+
+                int flags =
+                        MHD_USE_DEBUG |
+                        MHD_USE_DUAL_STACK |
+                        MHD_USE_PIPE_FOR_SHUTDOWN |
+                        MHD_USE_POLL |
+                        MHD_USE_THREAD_PER_CONNECTION;
 
                 if (n > 0)
                         opts[opts_pos++] = (struct MHD_OptionItem)
index 50f41a575d6d9f9bef8e5f730e6352d61e208bb1..5354bf6e51d97e56274e9cf52834bb1a7228acfa 100644 (file)
@@ -647,9 +647,10 @@ static int setup_microhttpd_server(RemoteServer *s,
         int opts_pos = 3;
         int flags =
                 MHD_USE_DEBUG |
-                MHD_USE_PEDANTIC_CHECKS |
+                MHD_USE_DUAL_STACK |
                 MHD_USE_EPOLL_LINUX_ONLY |
-                MHD_USE_DUAL_STACK;
+                MHD_USE_PEDANTIC_CHECKS |
+                MHD_USE_PIPE_FOR_SHUTDOWN;
 
         const union MHD_DaemonInfo *info;
         int r, epoll_fd;