]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: mworker: master wait mode use its own initialization
authorWilliam Lallemand <wlallemand@haproxy.com>
Tue, 11 Sep 2018 08:06:25 +0000 (10:06 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 11 Sep 2018 08:21:58 +0000 (10:21 +0200)
The master now use a poll loop, which should be initialized even in wait
mode. We need to init some variables if we didn't success to load the
configuration file.

src/haproxy.c

index 9dfdf9bf4eb9ccf88d9c4a91f8d2805192b570a0..0844af3ad6b1329f71881969d68e2547e9ddb283 100644 (file)
@@ -770,6 +770,8 @@ static void mworker_loop()
        mworker_unblock_signals();
        mworker_cleanlisteners();
 
+       tid = 0;
+
        global.nbthread = 1;
        relative_pid = 1;
        pid_bit = 1;
@@ -782,6 +784,40 @@ static void mworker_loop()
        run_thread_poll_loop((int []){0});
 }
 
+/*
+ * This function initialize haproxy for the master wait mode, it won't fork any
+ * new process and won't parse the configuration
+ */
+static int mworker_wait_mode()
+{
+
+       global.maxsock = 10; /* reserve 10 fds ; will be incremented by socket eaters */
+
+       if (!(global.tune.options & GTUNE_USE_KQUEUE))
+               disable_poller("kqueue");
+
+       if (!(global.tune.options & GTUNE_USE_EPOLL))
+               disable_poller("epoll");
+
+       if (!(global.tune.options & GTUNE_USE_POLL))
+               disable_poller("poll");
+
+       if (!(global.tune.options & GTUNE_USE_SELECT))
+               disable_poller("select");
+
+       if (global.tune.maxpollevents <= 0)
+               global.tune.maxpollevents = MAX_POLL_EVENTS;
+
+       init_pollers();
+
+
+       mworker_loop();
+
+       /* should never be there */
+
+       return -1;
+}
+
 /*
  * Reexec the process in failure mode, instead of exiting
  */
@@ -1517,7 +1553,7 @@ static void init(int argc, char **argv)
        if ((global.mode & MODE_MWORKER) && (getenv("HAPROXY_MWORKER_WAIT_ONLY") != NULL)) {
 
                unsetenv("HAPROXY_MWORKER_WAIT_ONLY");
-               mworker_loop();
+               mworker_wait_mode();
        }
 
        if ((global.mode & MODE_MWORKER) && (getenv("HAPROXY_MWORKER_REEXEC") != NULL)) {