From: Willy Tarreau Date: Mon, 26 Aug 2019 08:37:39 +0000 (+0200) Subject: BUG/MINOR: mworker: disable SIGPROF on re-exec X-Git-Tag: v2.1-dev2~174 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e0d86e2c1caaaa2141118e3309d479de5f67e855;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/haproxy.c b/src/haproxy.c index 4d58c53216..c490cead8b 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));