| Plucene documentation | Contained in the Plucene distribution. |
Plucene::Utils - Utility class for Plucene
use Plucene::Utils; do_locked($sub, $lock);
Utilities to help with Plucene.
do_locked($sub, $lock);
| Plucene documentation | Contained in the Plucene distribution. |
package Plucene::Utils;
use strict; use warnings; use Carp; use Fcntl qw(O_EXCL O_CREAT O_WRONLY); use base 'Exporter'; our @EXPORT = qw( do_locked );
sub do_locked (&$) { my ($sub, $lock) = @_; local *FH; for (1 .. 5) { sysopen FH, $lock, O_EXCL | O_CREAT | O_WRONLY and goto got_lock; sleep 1; warn "I had to sleep to get a lock on $lock"; } carp "Couldn't get lock $lock: $!"; got_lock: $sub->(); close *FH; unlink $lock; } 1;