This works similarly to -sf and -st except that rather
than terminating processes and then starting a new haproxy
instance is requests a restart and then exits.
---
src/haproxy.c | 17 ++++++++++++++---
1 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/src/haproxy.c b/src/haproxy.c
index 96c39ab..175d3e8 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -507,12 +507,16 @@ void init(int argc, char **argv)
arg_mode |= MODE_MASTER_WORKER;
else if (*flag == 'q')
arg_mode |= MODE_QUIET;
- else if (*flag == 's' && (flag[1] == 'f' || flag[1] ==
't')) {
- /* list of pids to finish ('f') or terminate
('t') */
+ else if (*flag == 's' && (flag[1] == 'f' || flag[1] ==
'r' || flag[1] == 't')) {
+ /* list of pids to finish ('f'),
+ * reset ('r') or terminate ('t')
+ */
if (flag[1] == 'f')
oldpids_sig = SIGUSR1; /* finish then
exit */
- else
+ else if (flag[1] == 'r')
+ oldpids_sig = SIGUSR2; /* restart */
+ else if (flag[1] == 't')
oldpids_sig = SIGTERM; /* terminate
immediately */
argv++; argc--;
@@ -1104,6 +1108,13 @@ void run(int argc, char **argv)
global.mode = (global.mode &
~(MODE_DAEMON|MODE_MASTER_WORKER)) | mode;
close_log(); /* It will automatically be reopened as needed */
+
+ /* Signalling a reset can be handled here */
+ if (oldpids_sig == SIGUSR2) {
+ tell_old_pids(SIGUSR2);
+ return;
+ }
+
signal_register_fct(SIGQUIT, dump, SIGQUIT);
signal_register_fct(SIGUSR1, sig_soft_stop, SIGUSR1);
if (global.mode & MODE_MASTER_WORKER)
--
1.7.2.3