mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-27 23:22:09 +00:00
BUG/MEDIUM: mworker: don't use _getsocks in wait mode
Since version 2.5 the master is automatically re-executed in wait-mode when the config is successfully loaded, puting corner cases of the wait mode in plain sight. When using the -x argument and with the right timing, the master will try to get the FDs again in wait mode even through it's not needed anymore, which will harm the worker by removing its listeners. However, if it fails, (and it's suppose to, sometimes), the master will exit with EXIT_FAILURE because it does not have the MODE_MWORKER flag, but only the MODE_MWORKER_WAIT flag. With the consequence of killing the workers. This patch fixes the issue by restricting the use of _getsocks to some modes. This patch must be backported in every version supported, even through the impact should me more harmless in version prior to 2.5.
This commit is contained in:
parent
99942d6f4c
commit
f82afbb9cd
@ -2988,7 +2988,12 @@ int main(int argc, char **argv)
|
||||
#endif
|
||||
}
|
||||
|
||||
if (old_unixsocket) {
|
||||
/* Try to get the listeners FD from the previous process using
|
||||
* _getsocks on the stat socket, it must never been done in wait mode
|
||||
* and check mode
|
||||
*/
|
||||
if (old_unixsocket &&
|
||||
!(global.mode & (MODE_MWORKER_WAIT|MODE_CHECK|MODE_CHECK_CONDITION))) {
|
||||
if (strcmp("/dev/null", old_unixsocket) != 0) {
|
||||
if (sock_get_old_sockets(old_unixsocket) != 0) {
|
||||
ha_alert("Failed to get the sockets from the old process!\n");
|
||||
|
Loading…
Reference in New Issue
Block a user