X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FDaemon.pm;h=dcc4d340eef8b3c1cad36f9f224b79c9cbfca8ea;hp=d438d27012effdc546c839b927eeeefee116818d;hb=e97f807c388c10250f442b1f16c5315df2ffc2af;hpb=d0138dbaca6d745420693552e86683a2d001ac2a diff --git a/src/PVE/Daemon.pm b/src/PVE/Daemon.pm index d438d27..dcc4d34 100644 --- a/src/PVE/Daemon.pm +++ b/src/PVE/Daemon.pm @@ -146,11 +146,7 @@ my $start_workers = sub { return if $self->{terminate}; - my $count = 0; - foreach my $cpid (keys %{$self->{workers}}) { - $count++; - } - + my $count = scalar keys %{$self->{workers}}; my $need = $self->{max_workers} - $count; return if $need <= 0; @@ -196,21 +192,16 @@ my $terminate_server = sub { $self->{terminate} = 1; # set flag to avoid worker restart - if (!$self->{max_workers}) { - eval { $self->shutdown(); }; - warn $@ if $@; - return; - } - eval { $self->shutdown(); }; warn $@ if $@; + return if !$self->{max_workers}; # if we have no workers we're done here # if configured, leave children running on HUP return if $allow_open_children && $self->{leave_children_open_on_reload}; # else send TERM to all (old and current) child workers - kill 15, keys %{$self->@{'workers','old_workers'}}; + kill 15, (keys %{$self->{workers}}, keys %{$self->{old_workers}}); # nicely shutdown childs (give them max 10 seconds to shut down) my $previous_alarm = alarm(10); @@ -290,6 +281,7 @@ sub setup { if ($restart && $self->{max_workers}) { if (my $wpids = $ENV{PVE_DAEMON_WORKER_PIDS}) { foreach my $pid (split(':', $wpids)) { + # check & untaint if ($pid =~ m/^(\d+)$/) { $self->{old_workers}->{$1} = 1; } @@ -503,8 +495,7 @@ sub restart_daemon { } if ($self->{max_workers}) { - my @workers = keys %{$self->{workers}}; - push @workers, keys %{$self->{old_workers}}; + my @workers = (keys %{$self->{workers}}, keys %{$self->{old_workers}}); $ENV{PVE_DAEMON_WORKER_PIDS} = join(':', @workers); }