applied On Thu, Sep 14, 2017 at 03:19:39PM +0200, Emmanuel Kasper wrote: > 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