File Coverage

blib/lib/Plucene/Utils.pm
Criterion Covered Total %
statement 22 25 88.0
branch 1 2 50.0
condition n/a
subroutine 6 6 100.0
pod 1 1 100.0
total 30 34 88.2


line stmt bran cond sub pod time code
1             package Plucene::Utils;
2              
3             =head1 NAME
4              
5             Plucene::Utils - Utility class for Plucene
6              
7             =head1 SYNOPSIS
8              
9             use Plucene::Utils;
10            
11             do_locked($sub, $lock);
12              
13             =head1 DESCRIPTION
14              
15             Utilities to help with Plucene.
16              
17             =head1 METHODS
18              
19             =cut
20              
21 18     18   105 use strict;
  18         34  
  18         617  
22 18     18   95 use warnings;
  18         36  
  18         570  
23              
24 18     18   99 use Carp;
  18         33  
  18         6192  
25 18     18   109 use Fcntl qw(O_EXCL O_CREAT O_WRONLY);
  18         36  
  18         935  
26              
27 18     18   92 use base 'Exporter';
  18         35  
  18         5250  
28             our @EXPORT = qw( do_locked );
29              
30             =head2 do_locked
31              
32             do_locked($sub, $lock);
33              
34             =cut
35              
36             sub do_locked (&$) {
37 59     59 1 167 my ($sub, $lock) = @_;
38 59         217 local *FH;
39 59         212 for (1 .. 5) {
40 59 50       4966 sysopen FH, $lock, O_EXCL | O_CREAT | O_WRONLY
41             and goto got_lock;
42 0         0 sleep 1;
43 0         0 warn "I had to sleep to get a lock on $lock";
44             }
45 0         0 carp "Couldn't get lock $lock: $!";
46 59         283 got_lock:
47             $sub->();
48 59         732 close *FH;
49 59         5294 unlink $lock;
50             }
51              
52             1;