X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FEmergency.pm;h=8c0cc18425b4c65aff680dbbd51e05b3bf90aa3a;hb=55b707d788ce13696e4411389583e720ea6dab01;hp=e402d30f848342800efb4891c46fc0b826dd585f;hpb=c1abb946e53e4179666ebb290e31c2d9ddc40711;p=public-inbox.git
diff --git a/lib/PublicInbox/Emergency.pm b/lib/PublicInbox/Emergency.pm
index e402d30f..8c0cc184 100644
--- a/lib/PublicInbox/Emergency.pm
+++ b/lib/PublicInbox/Emergency.pm
@@ -1,4 +1,4 @@
-# Copyright (C) 2016 all contributors
+# Copyright (C) 2016-2019 all contributors
# License: AGPL-3.0+
#
# Emergency Maildir delivery for MDA
@@ -7,18 +7,18 @@ use strict;
use warnings;
use Fcntl qw(:DEFAULT SEEK_SET);
use Sys::Hostname qw(hostname);
-use IO::Handle;
+use IO::Handle; # ->flush, ->autoflush
sub new {
my ($class, $dir) = @_;
+ -d $dir or mkdir($dir) or die "failed to mkdir($dir): $!\n";
foreach (qw(new tmp cur)) {
my $d = "$dir/$_";
next if -d $d;
- require File::Path;
- File::Path::mkpath($d); # croaks on fatal errors
+ -d $d or mkdir($d) or die "failed to mkdir($d): $!\n";
}
- bless { dir => $dir, files => {}, t => 0, cnt => 0 }, $class;
+ bless { dir => $dir, files => {}, t => 0, cnt => 0, pid => $$ }, $class;
}
sub _fn_in {
@@ -75,6 +75,7 @@ sub fh {
sub commit {
my ($self) = @_;
+ $$ == $self->{pid} or return; # no-op in forked child
delete $self->{fh};
my $tmp = delete $self->{tmp} or return;