From decbb9936a25dfedf6ecd916d8e0403f06217ec9 Mon Sep 17 00:00:00 2001
From: Eric Wong <e@yhbt.net>
Date: Sun, 22 Mar 2020 08:58:49 +0000
Subject: [PATCH] daemon: unlink .oldbin PID file correctly

We need to track the PID file having ".oldbin" appended
to it while a SIGUSR2 upgrade is in progress and ensure
it is unlinked on SIGQUIT.
---
 lib/PublicInbox/Daemon.pm | 4 ++--
 t/httpd-unix.t            | 1 +
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm
index 3d582e35..4ff7cad4 100644
--- a/lib/PublicInbox/Daemon.pm
+++ b/lib/PublicInbox/Daemon.pm
@@ -247,7 +247,7 @@ sub daemonize () {
 
 	write_pid($pid_file);
 	# for ->DESTROY:
-	bless { pid => $$, pid_file => $pid_file }, __PACKAGE__;
+	bless { pid => $$, pid_file => \$pid_file }, __PACKAGE__;
 }
 
 sub worker_quit { # $_[0] = signal name or number (unused)
@@ -663,7 +663,7 @@ sub write_pid ($) {
 }
 
 sub DESTROY {
-	unlink_pid_file_safe_ish($_[0]->{pid}, $_[0]->{pid_file});
+	unlink_pid_file_safe_ish($_[0]->{pid}, ${$_[0]->{pid_file}});
 }
 
 1;
diff --git a/t/httpd-unix.t b/t/httpd-unix.t
index 02f5e4a9..a0fe1e31 100644
--- a/t/httpd-unix.t
+++ b/t/httpd-unix.t
@@ -163,6 +163,7 @@ SKIP: {
 	# drop the old parent
 	kill('QUIT', $old_pid) or die "QUIT failed: $!";
 	delay_until(sub { !kill(0, $old_pid) });
+	ok(!-f "$pid_file.oldbin", '.oldbin PID file gone');
 
 	# drop the new child
 	check_sock($unix);
-- 
2.51.0