From: Stoiko Ivanov Date: Tue, 20 Nov 2018 08:46:31 +0000 (+0100) Subject: fork_worker: refactor child exit X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=commitdiff_plain;h=edbb302ec89d0a32b2cbb4f000f910f66d5e8dfc fork_worker: refactor child exit * factor out duplicated code. * drop final kill(-9, $$), since the POSIX:_exit call does not return (see man 2 _exit). Signed-off-by: Stoiko Ivanov --- diff --git a/src/PVE/RESTEnvironment.pm b/src/PVE/RESTEnvironment.pm index 69af004..c2fea2b 100644 --- a/src/PVE/RESTEnvironment.pm +++ b/src/PVE/RESTEnvironment.pm @@ -579,22 +579,21 @@ sub fork_worker { } &$function($upid); }; + my ($msg, $exitcode); my $err = $@; if ($err) { chomp $err; $err =~ s/\n/ /mg; syslog('err', $err); - my $msg = "TASK ERROR: $err\n"; - POSIX::write($resfh, $msg, length($msg)); - POSIX::close($resfh) if $sync; - POSIX::_exit(-1); + $msg = "TASK ERROR: $err\n"; + $exitcode = -1; } else { - my $msg = "TASK OK\n"; - POSIX::write($resfh, $msg, length($msg)); - POSIX::close($resfh) if $sync; - POSIX::_exit(0); + $msg = "TASK OK\n"; + $exitcode = 0; } - kill(-9, $$); + POSIX::write($resfh, $msg, length($msg)); + POSIX::close($resfh) if $sync; + POSIX::_exit($exitcode); } # parent