TerminateModuleForkChild(): use wait4 for safety.

In theory currently there is only one active child, but the API may
change or for bugs in the implementation we may have several (it was
like that for years because of a bug). Better to wait for a specific
pid and avoid consuing other pending children information.
This commit is contained in:
antirez 2019-09-27 11:59:58 +02:00
parent beb1356b5b
commit 82845f8d04

View File

@ -5193,7 +5193,8 @@ void TerminateModuleForkChild(int wait) {
serverLog(LL_NOTICE,"Killing running module fork child: %ld",
(long) server.module_child_pid);
if (kill(server.module_child_pid,SIGUSR1) != -1 && wait) {
while(wait3(&statloc,0,NULL) != server.module_child_pid);
while(wait4(server.module_child_pid,&statloc,0,NULL) !=
server.module_child_pid);
}
/* Reset the buffer accumulating changes while the child saves. */
server.module_child_pid = -1;