While signals are currently blocked in these helpers,
they may not always be...
sub dump_roots_flush ($$) {
my ($req, $fh) = @_;
if ($req->{wbuf} ne '') {
- flock($fh, LOCK_EX) or die "flock: $!";
+ until (flock($fh, LOCK_EX)) { die "LOCK_EX: $!" if !$!{EINTR} }
print { $req->{0} } $req->{wbuf} or die "print: $!";
- flock($fh, LOCK_UN) or die "flock: $!";
+ until (flock($fh, LOCK_UN)) { die "LOCK_UN: $!" if !$!{EINTR} }
$req->{wbuf} = '';
}
}
}
drt->wbuf.fp = NULL;
if (!drt->wbuf.len) goto done_free;
- if (flock(drt->root2id_fd, LOCK_EX)) {
+ while (flock(drt->root2id_fd, LOCK_EX)) {
+ if (errno == EINTR) continue;
perror("LOCK_EX");
return false;
}
return false;
}
} while (drt->wbuf.len);
- if (flock(drt->root2id_fd, LOCK_UN)) {
+ while (flock(drt->root2id_fd, LOCK_UN)) {
+ if (errno == EINTR) continue;
perror("LOCK_UN");
return false;
}