all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH librados2-perl] do not shut down the handle twice if a signal arrives at exit
@ 2026-10-20 14:12 Kefu Chai
  2026-10-20 14:59 ` Maximiliano Sandoval
  2026-10-21  7:47 ` Maximiliano Sandoval
  0 siblings, 2 replies; 3+ messages in thread
From: Kefu Chai @ 2026-10-20 14:12 UTC (permalink / raw)
  To: pve-devel

When a pveceph worker finishes, the CLI sends SIGTERM to its process
group, which includes the pverados child. That child is often already
shutting down the handle after seeing EOF, so the handler then calls
rados_shutdown() on the freed handle and the child segfaults.

The handlers outlived the eval anyway, as the 'local' only covered
$SIG{HUP}. So ignore the signals before shutting down, and install the
handlers first thing in the child.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
---
 PVE/RADOS.pm | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/PVE/RADOS.pm b/PVE/RADOS.pm
index 5a79235..deb4912 100644
--- a/PVE/RADOS.pm
+++ b/PVE/RADOS.pm
@@ -200,6 +200,17 @@ sub new {
     } else { # child
 	$0 = 'pverados';
 
+	my @signals = qw(HUP INT QUIT TERM);
+
+	# ignore signals from here on, the handler must not shut down a freed handle
+	my $shutdown = sub {
+	    @SIG{@signals} = ('IGNORE') x @signals;
+	    pve_rados_shutdown($self->{conn}) if $self->{conn};
+	};
+
+	# override signal handlers inherited from the parent
+	@SIG{@signals} = (sub { $shutdown->(); POSIX::_exit(1); }) x @signals;
+
 	eval {
 	    PVE::INotify::inotify_close();
 
@@ -207,12 +218,6 @@ sub new {
 		&$atfork();
 	    }
 
-	    # override signal handlers inherited from the parent
-	    local $SIG{HUP} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
-		pve_rados_shutdown($self->{conn}) if $self->{conn};
-		POSIX::_exit(1);
-	    };
-
 	    # fixme: timeout?
 
 	    close $child;
@@ -222,7 +227,7 @@ sub new {
 	my $err = $@;
 	warn $err if $err;
 
-	pve_rados_shutdown($self->{conn}) if $self->{conn};
+	$shutdown->();
 	POSIX::_exit($err ? 1 : 0);
     }
 
-- 
2.47.3





^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-10-21  7:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-20 14:12 [PATCH librados2-perl] do not shut down the handle twice if a signal arrives at exit Kefu Chai
2026-10-20 14:59 ` Maximiliano Sandoval
2026-10-21  7:47 ` Maximiliano Sandoval

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal