When a worker is leaving, we display the relative PID and the result of
the strsignal() function if it was killed by a signal.
---
 src/haproxy.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/haproxy.c b/src/haproxy.c
index b89be13f1..c7ea65d5f 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -813,32 +813,33 @@ restart_wait:
 
                        LIST_DEL(&child->list);
                        close(child->ipc_fd[0]);
-                       free(child);
                        break;
                }
 
                if (!children) {
-                       ha_warning("Worker %d exited with code %d\n", exitpid, 
status);
+                       ha_warning("Worker %d exited with code %d (%s)\n", 
exitpid, status, (status >= 128) ? strsignal(status - 128) : "Exit");
                } else {
                        /* check if exited child was in the current children 
list */
                        if (current_child(exitpid)) {
-                               ha_alert("Current worker %d exited with code 
%d\n", exitpid, status);
+                               ha_alert("Current worker #%d (%d) exited with 
code %d (%s)\n", child->relative_pid, exitpid, status, (status >= 128) ? 
strsignal(status - 128) : "Exit");
                                if (status != 0 && status != 130 && status != 
143
                                    && !(global.tune.options & 
GTUNE_NOEXIT_ONFAILURE)) {
                                        ha_alert("exit-on-failure: killing 
every workers with SIGTERM\n");
                                        mworker_kill(SIGTERM);
                                }
                        } else {
-                               ha_warning("Former worker %d exited with code 
%d\n", exitpid, status);
+                               ha_warning("Former worker #%d (%d) exited with 
code %d (%s)\n", child->relative_pid, exitpid, status, (status >= 128) ? 
strsignal(status - 128) : "Exit");
                                delete_oldpid(exitpid);
                        }
                }
+               free(child);
+
                /* do it again to check if it was the last worker */
                goto restart_wait;
        }
        /* Better rely on the system than on a list of process to check if it 
was the last one */
        else if (exitpid == -1 && errno == ECHILD) {
-               ha_warning("All workers exited. Exiting... (%d)\n", status);
+               ha_warning("All workers exited. Exiting... (%d)\n", (exitcode > 
0) ? exitcode : status);
                atexit_flag = 0;
                exit(status); /* parent must leave using the latest status code 
known */
        }
-- 
2.16.4


Reply via email to