mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-05-04 20:46:11 +02:00
REORG: startup: move mworker_run_master and mworker_loop in mworker.c
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().
This commit is contained in:
parent
56894db000
commit
0c7b93eb1d
@ -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);
|
||||
|
||||
@ -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_ */
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 },
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user