|
|
- commit f259fcc00a04e633a7a64f894a719f78f3644867
- Author: Willy Tarreau <w@1wt.eu>
- Date: Mon Aug 26 10:37:39 2019 +0200
-
- BUG/MINOR: mworker: disable SIGPROF on re-exec
-
- If haproxy is built with profiling enabled with -pg, it is possible to
- see the master quit during a reload while it's re-executing itself with
- error code 155 (signal 27) saying "Profile timer expired)". This happens
- if the SIGPROF signal is delivered during the execve() call while the
- handler was already unregistered. The issue itself is not directly inside
- haproxy but it's easy to address. This patch disables this signal before
- calling execvp() during a master reload. A simple test for this consists
- in running this little script with haproxy started in master-worker mode :
-
- $ while usleep 50000; do killall -USR2 haproxy; done
-
- This fix should be backported to all versions using the master-worker
- model.
-
- (cherry picked from commit e0d86e2c1caaaa2141118e3309d479de5f67e855)
- Signed-off-by: Willy Tarreau <w@1wt.eu>
-
- diff --git a/src/haproxy.c b/src/haproxy.c
- index f6f00fc1..c93b0d13 100644
- --- a/src/haproxy.c
- +++ b/src/haproxy.c
- @@ -695,6 +695,7 @@ void mworker_reload()
- }
-
- ha_warning("Reexecuting Master process\n");
- + signal(SIGPROF, SIG_IGN);
- execvp(next_argv[0], next_argv);
-
- ha_warning("Failed to reexecute the master process [%d]: %s\n", pid, strerror(errno));
|