perls 'local' must be either used in front of each $SIG{...} assignments or they must be put in a list, else it affects only the first variable and the rest are *not* in local context.
In all cases the global signal handlers we overwrote were in cli programs or forked workers, not in daemons. --- PVE/API2/Qemu.pm | 5 ++++- PVE/QemuServer.pm | 23 ++++++++++++++--------- PVE/QemuServer/ImportDisk.pm | 8 +++++--- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 1002c87..66ffc07 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -2697,7 +2697,10 @@ __PACKAGE__->register_method({ my $newvollist = []; eval { - local $SIG{INT} = $SIG{TERM} = $SIG{QUIT} = $SIG{HUP} = sub { die "interrupted by signal\n"; }; + local $SIG{INT} = + local $SIG{TERM} = + local $SIG{QUIT} = + local $SIG{HUP} = sub { die "interrupted by signal\n"; }; warn "moving disk with snapshots, snapshots will not be moved!\n" if $snapshotted; diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 2d09726..03e7ca4 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -5622,9 +5622,11 @@ sub restore_vma_archive { eval { # enable interrupts - local $SIG{INT} = $SIG{TERM} = $SIG{QUIT} = $SIG{HUP} = $SIG{PIPE} = sub { - die "interrupted by signal\n"; - }; + local $SIG{INT} = + local $SIG{TERM} = + local $SIG{QUIT} = + local $SIG{HUP} = + local $SIG{PIPE} = sub { die "interrupted by signal\n"; }; local $SIG{ALRM} = sub { die "got timeout\n"; }; $oldtimeout = alarm($timeout); @@ -5738,15 +5740,18 @@ sub restore_tar_archive { my $tmpfn = "$conffile.$$.tmp"; # disable interrupts (always do cleanups) - local $SIG{INT} = $SIG{TERM} = $SIG{QUIT} = $SIG{HUP} = sub { - print STDERR "got interrupt - ignored\n"; - }; + local $SIG{INT} = + local $SIG{TERM} = + local $SIG{QUIT} = + local $SIG{HUP} = sub { print STDERR "got interrupt - ignored\n"; }; eval { # enable interrupts - local $SIG{INT} = $SIG{TERM} = $SIG{QUIT} = $SIG{HUP} = $SIG{PIPE} = sub { - die "interrupted by signal\n"; - }; + local $SIG{INT} = + local $SIG{TERM} = + local $SIG{QUIT} = + local $SIG{HUP} = + local $SIG{PIPE} = sub { die "interrupted by signal\n"; }; if ($archive eq '-') { print "extracting archive from STDIN\n"; diff --git a/PVE/QemuServer/ImportDisk.pm b/PVE/QemuServer/ImportDisk.pm index edbc20e..db7db63 100755 --- a/PVE/QemuServer/ImportDisk.pm +++ b/PVE/QemuServer/ImportDisk.pm @@ -82,9 +82,11 @@ sub do_import { eval { # trap interrupts so we have a chance to clean up - local $SIG{INT} = $SIG{TERM} = $SIG{QUIT} = $SIG{HUP} = $SIG{PIPE} = sub { - die "interrupted by signal\n"; - }; + local $SIG{INT} = + local $SIG{TERM} = + local $SIG{QUIT} = + local $SIG{HUP} = + local $SIG{PIPE} = sub { die "interrupted by signal\n"; }; PVE::Storage::activate_volumes($storecfg, [$dst_volid]); run_command($convert_command); PVE::Storage::deactivate_volumes($storecfg, [$dst_volid]); -- 2.11.0 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel