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 92a483bca2)
This commit is contained in:
Meir Shpilraien (Spielrein)
2021-02-22 23:22:53 +02:00
committed by Oran Agra
parent e4ab38a3e4
commit 35da4aee7e
2 changed files with 5 additions and 1 deletions
+1 -1
View File
@@ -1335,7 +1335,7 @@ void sigsegvHandler(int sig, siginfo_t *info, void *secret) {
);
/* 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
* the core will be dumped if enabled. */
+4
View File
@@ -4043,6 +4043,10 @@ void closeClildUnusedResourceAfterFork() {
closeListeningSockets(0);
if (server.cluster_enabled && server.cluster_config_file_lock_fd != -1)
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;
}
void memtest(size_t megabytes, int passes);