use Errno qw( EINTR ); sub unint_flock(*$) { for (;;) { return if flock($_[0], $_[1]) || $! != EINTR; } } sub unint_sleep($) { my $sleep_til = time + $_[0]; for (;;) { my $sleep_dur = time - $sleep_til; last if $sleep_dur <= 0; sleep($sleep_dur); } }