On Tue, Jun 20, 2017 at 09:11:13AM +0200, Wolfgang Bumiller wrote:
> > +    if (!defined($child)) {
> > +   warn "fork failed: $!\n";
> 
> Why not just die? This is an actual exception after all.

Ah I see, df() does the same. It probably shouldn't but its only user
currently doesn't want it to throw.
Ideally the df() implementation could just use this function instead
in which case either df() or PVE::LXC have to just wrap an eval{} around
the call, but for a generic "run in a fork with timeout" function the
interface should properly throw when an exceptional error occurs.

> 
> > +   return $res;
> > +    }
> > +
> > +    if (!$child) {
> > +   $pipe->writer();
> > +   eval {
> > +       $res = $sub->();
> > +       print {$pipe} "$res";
> > +       $pipe->close();
> > +   };
> > +   if (my $err = $@) {
> > +       warn $err;
> > +       POSIX::_exit(1);
> > +   }
> > +   POSIX::_exit(0);
> > +    }
> > +
> > +    $pipe->reader();
> > +
> > +    my $readvalues = sub {

One more not here: you could add:
    local $/ = undef;
here to have <$pipe> read to the end rather than just one line.

> > +   $res = (<$pipe> =~ /^(.*)$/)[0];

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to