Fix issue where fork process deletes the parent pidfile (#8231)
Turns out that when the fork child crashes, the crash log was deleting the pidfile from the disk (although the parent is still running. Now we set the pidfile of the fork process to NULL so the fork process will never deletes it. (cherry picked from commit 4192faa9821aa4c19be3bd245d8366a1bc1b0332)
This commit is contained in:
parent
2355a7056f
commit
b0a00784da
@ -1724,7 +1724,7 @@ void sigsegvHandler(int sig, siginfo_t *info, void *secret) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
/* free(messages); Don't call free() with possibly corrupted memory. */
|
/* free(messages); Don't call free() with possibly corrupted memory. */
|
||||||
if (server.daemonize && server.supervised == 0) unlink(server.pidfile);
|
if (server.daemonize && server.supervised == 0 && server.pidfile) unlink(server.pidfile);
|
||||||
|
|
||||||
/* Make sure we exit with the right signal at the end. So for instance
|
/* Make sure we exit with the right signal at the end. So for instance
|
||||||
* the core will be dumped if enabled. */
|
* the core will be dumped if enabled. */
|
||||||
|
@ -5085,6 +5085,10 @@ void closeClildUnusedResourceAfterFork() {
|
|||||||
closeListeningSockets(0);
|
closeListeningSockets(0);
|
||||||
if (server.cluster_enabled && server.cluster_config_file_lock_fd != -1)
|
if (server.cluster_enabled && server.cluster_config_file_lock_fd != -1)
|
||||||
close(server.cluster_config_file_lock_fd); /* don't care if this fails */
|
close(server.cluster_config_file_lock_fd); /* don't care if this fails */
|
||||||
|
|
||||||
|
/* Clear server.pidfile, this is the parent pidfile which should not
|
||||||
|
* be touched (or deleted) by the child (on exit / crash) */
|
||||||
|
server.pidfile = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* purpose is one of CHILD_TYPE_ types */
|
/* purpose is one of CHILD_TYPE_ types */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user