]>
git.p6c8.net - selfforum.git/blob - selfforum-cgi/shared/Lock/Unlink.pm
3 ################################################################################
5 # File: shared/Lock/Unlink.pm #
7 # Authors: André Malo <nd@o3media.de> #
9 # Description: Locking and Filehandle class #
10 # using the atomic behavior of unlinkig files #
12 ################################################################################
17 ################################################################################
25 sub VERSION
{(q
$Revision$ =~ /([\d.]+)\s*$/)[0] or '0.0'}
27 ### _simple_lock () ############################################################
32 # Params: $filename - file to lock
35 # Return: success (boolean)
40 unlink $fh -> filename
and return 1;
45 ### _simple_unlock () ##########################################################
50 # Params: $filename - lockfile name
53 # Return: success (boolean)
56 my ($self, $filename) = @_;
59 sysopen (LF
, $filename, O_WRONLY
| O_CREAT
| O_TRUNC
)
63 # not able to create lock file, hmmm...
68 ### _reftime () ################################################################
70 # determine reference time for violent unlock
74 # Return: time or zero, if no reference file found
78 my ($time, $reffile) = 0;
80 if (-f
($reffile = $self -> filename
)) {
81 $time = (stat $reffile)[9];}
83 elsif (-f
($reffile = $self -> lockfile
)) {
84 $time = (stat $reffile)[9];}
89 ### masterlocked () ############################################################
91 # check on master lock status of the file
95 # Return: status (boolean)
97 sub masterlocked
{not -f
shift -> masterlock
}
99 ### excl_announced () ##########################################################
101 # check on exclusive lock announced status of the file
105 # Return: status (boolean)
107 sub excl_announced
{not -f
shift -> lockfile
}
109 ### exsh_announced () ##########################################################
111 # check on exclusive shared lock status of the file
115 # Return: status (boolean)
117 sub exsh_announced
{not -f
shift -> exshlock
}
119 ### purge () ###################################################################
121 # cover our traces after a file was removed
130 $self -> set_ref
(0); # reference counter = 0
131 unlink ($self -> reflock
); # remove reference counter lock
132 unlink ($self -> lockfile
); # remove any write lock announce
133 unlink ($self -> exshlock
); # remove any excl shared lock
134 unlink ($self -> masterlock
); # remove master lock
139 # keep 'require' happy
144 ### end of Lock::Unlink ########################################################
patrick-canterino.de