mirror of
git://git.proxmox.com/git/pve-common.git
synced 2024-12-24 01:33:48 +03:00
tools: unbless errors in run_fork_with_timeout
We cannot properly encode blessed objects as json, so instead, we should stringify them. This happened for instance if a VM's systemd scope wasn't cleaned up as we got an error as a Net::DBus::Error object causing a "malformed json string" error to appear instead of the actual message. Additionally, add a 'must_stringify' helper: The above error object implements a '""' operator for stringification (as all error should), but in theory that could die as well, in which case we just return a generic error string we'll hopefully never see... Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
d86dc5eeaf
commit
893ec6f259
@ -904,6 +904,13 @@ sub next_spice_port {
|
||||
return next_unused_port(61000, 61099, $family, $address);
|
||||
}
|
||||
|
||||
sub must_stringify {
|
||||
my ($value) = @_;
|
||||
eval { $value = "$value" };
|
||||
return "error turning value into a string: $@" if $@;
|
||||
return $value;
|
||||
}
|
||||
|
||||
# sigkill after $timeout a $sub running in a fork if it can't write a pipe
|
||||
# the $sub has to return a single scalar
|
||||
sub run_fork_with_timeout {
|
||||
@ -935,7 +942,7 @@ sub run_fork_with_timeout {
|
||||
$pipe_out->flush();
|
||||
};
|
||||
if (my $err = $@) {
|
||||
print {$pipe_out} encode_json({ error => $err });
|
||||
print {$pipe_out} encode_json({ error => must_stringify($err) });
|
||||
$pipe_out->flush();
|
||||
POSIX::_exit(1);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user