]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
REORG: startup: move mworker_run_master and mworker_loop in mworker.c
authorValentine Krasnobaeva <vkrasnobaeva@haproxy.com>
Fri, 22 Nov 2024 22:15:39 +0000 (23:15 +0100)
committerWilliam Lallemand <wlallemand@haproxy.com>
Mon, 25 Nov 2024 14:20:24 +0000 (15:20 +0100)
mworker_run_master() is called only in master mode. mworker_loop() is static
and called only in mworker_run_master(). So let's move these both functions in
mworker.c.

We also need here to make run_thread_poll_loop() accessible from other units,
as it's used in mworker_loop().

include/haproxy/global.h
include/haproxy/mworker.h
src/haproxy.c
src/mworker.c

index 40ec67af9571725fbdbc7efceaf5285318e9b52c..dcd724a30a370c9a872fb25b4489885bfadd6327 100644 (file)
@@ -58,6 +58,7 @@ int main(int argc, char **argv);
 void deinit(void);
 __attribute__((noreturn)) void deinit_and_exit(int);
 void run_poll_loop(void);
+void *run_thread_poll_loop(void *data); /* takes the thread config in argument or NULL for any thread */
 int tell_old_pids(int sig);
 int delete_oldpid(int pid);
 void hap_register_build_opts(const char *str, int must_free);
index f2c60a333d31c3141600d35053ebb94fb5d1635e..29c05d6d0ab04331481e8c1899b9bea80c00f69a 100644 (file)
@@ -52,5 +52,6 @@ void mworker_cleanup_proc();
 void mworker_create_master_cli(void);
 
 void mworker_prepare_master(void);
+void mworker_run_master(void);
 
 #endif /* _HAPROXY_MWORKER_H_ */
index e6731580433d4d2230adb26208015db74b4518a8..37917c0878ea3cff5f967944584c897cba5fcc2e 100644 (file)
@@ -262,9 +262,6 @@ int master = 0; /* 1 if in master, 0 if in child */
 /* per-boot randomness */
 unsigned char boot_seed[20];        /* per-boot random seed (160 bits initially) */
 
-/* takes the thread config in argument or NULL for any thread */
-static void *run_thread_poll_loop(void *data);
-
 /* bitfield of a few warnings to emit just once (WARN_*) */
 unsigned int warned = 0;
 
@@ -878,42 +875,6 @@ void mworker_reload(int hardreload)
        mworker_reexec(hardreload);
 }
 
-static void mworker_loop()
-{
-
-       /* Busy polling makes no sense in the master :-) */
-       global.tune.options &= ~GTUNE_BUSY_POLLING;
-
-
-       signal_unregister(SIGTTIN);
-       signal_unregister(SIGTTOU);
-       signal_unregister(SIGUSR1);
-       signal_unregister(SIGHUP);
-       signal_unregister(SIGQUIT);
-
-       signal_register_fct(SIGTERM, mworker_catch_sigterm, SIGTERM);
-       signal_register_fct(SIGUSR1, mworker_catch_sigterm, SIGUSR1);
-       signal_register_fct(SIGTTIN, mworker_broadcast_signal, SIGTTIN);
-       signal_register_fct(SIGTTOU, mworker_broadcast_signal, SIGTTOU);
-       signal_register_fct(SIGINT, mworker_catch_sigterm, SIGINT);
-       signal_register_fct(SIGHUP, mworker_catch_sighup, SIGHUP);
-       signal_register_fct(SIGUSR2, mworker_catch_sighup, SIGUSR2);
-       signal_register_fct(SIGCHLD, mworker_catch_sigchld, SIGCHLD);
-
-       mworker_unblock_signals();
-       mworker_cleantasks();
-
-       mworker_catch_sigchld(NULL); /* ensure we clean the children in case
-                                    some SIGCHLD were lost */
-
-       jobs++; /* this is the "master" job, we want to take care of the
-               signals even if there is no listener so the poll loop don't
-               leave */
-
-       fork_poller();
-       run_thread_poll_loop(NULL);
-}
-
 /*
  * Exit with an error message upon a master recovery mode failure.
  */
@@ -1960,37 +1921,6 @@ static void generate_random_cluster_secret()
        cluster_secret_isset = 1;
 }
 
-static void mworker_run_master()
-{
-       struct mworker_proc *child, *it;
-
-       proc_self->failedreloads = 0; /* reset the number of failure */
-       mworker_loop();
-#if defined(USE_OPENSSL) && !defined(OPENSSL_NO_DH)
-       ssl_free_dh();
-#endif
-       master = 0;
-       /* close useless master sockets */
-       mworker_cli_proxy_stop();
-
-       /* free proc struct of other processes  */
-       list_for_each_entry_safe(child, it, &proc_list, list) {
-               /* close the FD of the master side for all
-                * workers, we don't need to close the worker
-                * side of other workers since it's done with
-                * the bind_proc */
-               if (child->ipc_fd[0] >= 0) {
-                       close(child->ipc_fd[0]);
-                       child->ipc_fd[0] = -1;
-               }
-               LIST_DELETE(&child->list);
-               mworker_free_child(child);
-               child = NULL;
-       }
-       /* master must leave */
-       exit(0);
-}
-
 /*
  * This function does daemonization fork. It only returns if everything is OK.
  * If something fails, it exits.
@@ -3405,7 +3335,7 @@ void run_poll_loop()
        _HA_ATOMIC_AND(&th_ctx->flags, ~TH_FL_IN_LOOP);
 }
 
-static void *run_thread_poll_loop(void *data)
+void *run_thread_poll_loop(void *data)
 {
        struct per_thread_alloc_fct  *ptaf;
        struct per_thread_init_fct   *ptif;
index 8fd0c02a6c12703f8919e1ce8d6a4e760ead5c64..8d7d84b93b220d2fbddd9c591f377b4962991d4c 100644 (file)
@@ -36,6 +36,7 @@
 #include <haproxy/ring.h>
 #include <haproxy/sc_strm.h>
 #include <haproxy/signal.h>
+#include <haproxy/ssl_sock.h>
 #include <haproxy/stconn.h>
 #include <haproxy/stream.h>
 #include <haproxy/systemd.h>
@@ -988,6 +989,73 @@ void mworker_prepare_master(void)
        LIST_APPEND(&proc_list, &tmproc->list);
 }
 
+static void mworker_loop()
+{
+
+       /* Busy polling makes no sense in the master :-) */
+       global.tune.options &= ~GTUNE_BUSY_POLLING;
+
+
+       signal_unregister(SIGTTIN);
+       signal_unregister(SIGTTOU);
+       signal_unregister(SIGUSR1);
+       signal_unregister(SIGHUP);
+       signal_unregister(SIGQUIT);
+
+       signal_register_fct(SIGTERM, mworker_catch_sigterm, SIGTERM);
+       signal_register_fct(SIGUSR1, mworker_catch_sigterm, SIGUSR1);
+       signal_register_fct(SIGTTIN, mworker_broadcast_signal, SIGTTIN);
+       signal_register_fct(SIGTTOU, mworker_broadcast_signal, SIGTTOU);
+       signal_register_fct(SIGINT, mworker_catch_sigterm, SIGINT);
+       signal_register_fct(SIGHUP, mworker_catch_sighup, SIGHUP);
+       signal_register_fct(SIGUSR2, mworker_catch_sighup, SIGUSR2);
+       signal_register_fct(SIGCHLD, mworker_catch_sigchld, SIGCHLD);
+
+       mworker_unblock_signals();
+       mworker_cleantasks();
+
+       mworker_catch_sigchld(NULL); /* ensure we clean the children in case
+                                    some SIGCHLD were lost */
+
+       jobs++; /* this is the "master" job, we want to take care of the
+               signals even if there is no listener so the poll loop don't
+               leave */
+
+       fork_poller();
+       run_thread_poll_loop(NULL);
+}
+
+void mworker_run_master(void)
+{
+       struct mworker_proc *child, *it;
+
+       proc_self->failedreloads = 0; /* reset the number of failure */
+       mworker_loop();
+#if defined(USE_OPENSSL) && !defined(OPENSSL_NO_DH)
+       ssl_free_dh();
+#endif
+       master = 0;
+       /* close useless master sockets */
+       mworker_cli_proxy_stop();
+
+       /* free proc struct of other processes  */
+       list_for_each_entry_safe(child, it, &proc_list, list) {
+               /* close the FD of the master side for all
+                * workers, we don't need to close the worker
+                * side of other workers since it's done with
+                * the bind_proc */
+               if (child->ipc_fd[0] >= 0) {
+                       close(child->ipc_fd[0]);
+                       child->ipc_fd[0] = -1;
+               }
+               LIST_DELETE(&child->list);
+               mworker_free_child(child);
+               child = NULL;
+       }
+       /* master must leave */
+       exit(0);
+}
+
 static struct cfg_kw_list mworker_kws = {{ }, {
        { CFG_GLOBAL, "mworker-max-reloads", mworker_parse_global_max_reloads, KWF_DISCOVERY },
        { 0, NULL, NULL },