BUG/MINOR: mworker: does not add the -sf in wait mode
authorWilliam Lallemand <wlallemand@haproxy.org>
Wed, 24 Nov 2021 23:49:19 +0000 (00:49 +0100)
committerWilliam Lallemand <wlallemand@haproxy.org>
Fri, 11 Feb 2022 15:45:50 +0000 (16:45 +0100)
Since the wait mode is automatically executed after charging the
configuration, -sf was shown in argv[] with the previous PID, which is
normal, but also the current one. This is only a visual problem when
listing the processes, because -sf does not do anything in wait mode.

Fix the issue by removing the whole "-sf" part in wait mode, but the
executed command can be seen in the argv[] of the latest worker forked.

Must be backported in 2.5.

(cherry picked from commit befab9ee4aa2dfe0405d7f1416991175be2fbe67)
[wla: in 2.5 we still need the -x in wait mode, because we don't know
anymore the stats socket in the configuration once we reexec in waitmode]
Signed-off-by: William Lallemand <wlallemand@haproxy.org>

src/haproxy.c

index ee42057..5800a46 100644 (file)
@@ -757,18 +757,20 @@ static void mworker_reexec()
 
        /* insert the new options just after argv[0] in case we have a -- */
 
-       /* add -sf <PID>*  to argv */
-       if (mworker_child_nb() > 0) {
-               struct mworker_proc *child;
-
-               next_argv[next_argc++] = "-sf";
-
-               list_for_each_entry(child, &proc_list, list) {
-                       if (!(child->options & (PROC_O_TYPE_WORKER|PROC_O_TYPE_PROG)) || child->pid <= -1 )
-                               continue;
-                       if ((next_argv[next_argc++] = memprintf(&msg, "%d", child->pid)) == NULL)
-                               goto alloc_error;
-                       msg = NULL;
+       if (getenv("HAPROXY_MWORKER_WAIT_ONLY") == NULL) {
+               /* add -sf <PID>*  to argv */
+               if (mworker_child_nb() > 0) {
+                       struct mworker_proc *child;
+
+                       next_argv[next_argc++] = "-sf";
+
+                       list_for_each_entry(child, &proc_list, list) {
+                               if (!(child->options & (PROC_O_TYPE_WORKER|PROC_O_TYPE_PROG)) || child->pid <= -1 )
+                                       continue;
+                               if ((next_argv[next_argc++] = memprintf(&msg, "%d", child->pid)) == NULL)
+                                       goto alloc_error;
+                               msg = NULL;
+                       }
                }
        }
        /* add the -x option with the stat socket */