Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit cd23a20

Browse files
committed
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
1 parent 4c87010 commit cd23a20

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

src/bin/pg_dump/parallel.c

+5-2
Original file line numberDiff line numberDiff line change
@@ -606,8 +606,11 @@ sigTermHandler(SIGNAL_ARGS)
606606
write_stderr("terminated by user\n");
607607
}
608608

609-
/* And die. */
610-
exit(1);
609+
/*
610+
* And die, using _exit() not exit() because the latter will invoke atexit
611+
* handlers that can fail if we interrupted related code.
612+
*/
613+
_exit(1);
611614
}
612615

613616
/*

0 commit comments

Comments
 (0)