Fix pg_dump's sigTermHandler() to use _exit() not exit().
sigTermHandler() tried to be careful to invoke only operations that are safe to do in a signal handler. But for some reason we forgot that exit(3) is not among those, because it calls atexit handlers that might do various random things. (pg_dump itself installs no atexit handlers, but e.g. OpenSSL does.) That led to crashes or lockups when attempting to terminate a parallel dump or restore via a signal. Fix by calling _exit() instead. Per bug #16199 from Raúl Marín. Back-patch to all supported branches. Discussion: https://postgr.es/m/16199-cb2f121146a96f9b@postgresql.org
This commit is contained in:
parent
4c87010981
commit
cd23a2019c
@ -606,8 +606,11 @@ sigTermHandler(SIGNAL_ARGS)
|
||||
write_stderr("terminated by user\n");
|
||||
}
|
||||
|
||||
/* And die. */
|
||||
exit(1);
|
||||
/*
|
||||
* And die, using _exit() not exit() because the latter will invoke atexit
|
||||
* handlers that can fail if we interrupted related code.
|
||||
*/
|
||||
_exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user