+sub _close ($;$) {
+ my ($self, $wait) = @_;
+ my $fh = delete $self->{fh};
+ my $ret = defined($fh) ? close($fh) : '';
+ my ($pid, $cb, $arg) = delete @$self{qw(pid cb arg)};
+ return $ret unless defined($pid) && $self->{ppid} == $$;
+ if ($wait) { # caller cares about the exit status:
+ my $wp = waitpid($pid, 0);
+ if ($wp == $pid) {