]>
git.p6c8.net - selfforum.git/blob - selfforum-cgi/shared/Lock/Exclusive.pm
1 package Lock
::Exclusive
;
3 ################################################################################
5 # File: shared/Lock/Exclusive.pm #
7 # Authors: Andre Malo <nd@o3media.de>, 2001-05-25 #
9 # Description: Locking and Filehandle class #
10 # using O_EXCL and lock files #
12 ################################################################################
21 ################################################################################
25 $VERSION = do { my @r =(q
$Revision$ =~ /\d+/g); sprintf "%d."."%02d" x
$#r, @r };
27 ### sub _simple_lock ###########################################################
32 # Params: $filename - file to lock
35 # Return: success (boolean)
40 sysopen ($fh, $fh->filename, O_CREAT
| O_EXCL
| O_WRONLY
)
47 ### sub _simple_unlock #########################################################
52 # Params: $filename - lockfile name
55 # Return: success (boolean)
58 my ($self, $filename) = @_;
60 return 1 if (!-f
$filename or unlink $filename);
62 # not able to unlink lock file, hmmm...
67 ### sub _reftime ###############################################################
69 # determine reference time for violent unlock
73 # Return: time or zero, if no reference file found
77 my ($time, $reffile) = 0;
79 if (-f
($reffile = $self -> filename
)) {
80 $time = (stat $reffile)[9];}
82 elsif (-f
($reffile = $self -> lockfile
)) {
83 $time = (stat $reffile)[9];}
88 ### sub masterlocked ###########################################################
90 # check on master lock status of the file
94 # Return: status (boolean)
96 sub masterlocked
{-f
shift -> masterlock
}
98 ### sub excl_announced #########################################################
100 # check on exclusive lock announced status of the file
104 # Return: status (boolean)
106 sub excl_announced
{-f
shift -> lockfile
}
108 ### sub exsh_announced #########################################################
110 # check on exclusive shared lock status of the file
114 # Return: status (boolean)
116 sub exsh_announced
{-f
shift -> exshlock
}
118 # keep 'require' happy
123 ### end of Lock::Exclusive #####################################################
patrick-canterino.de