]> git.p6c8.net - selfforum.git/blobdiff - selfforum-cgi/shared/Lock.pm
German.pm: added version check, turned 'germantime' to 'localtime'. Time::German...
[selfforum.git] / selfforum-cgi / shared / Lock.pm
index 3f01861712c1a2c562af21ac2a83b9288f9967e7..88f9a5a8f27ec00f62ef1bd3f07f95547e407ba7 100644 (file)
@@ -19,11 +19,18 @@ use vars qw(
   $violentTimeout
   $masterTimeout
   $iAmMaster
+  $VERSION
 );
 
 use Carp;
 use Fcntl;
 
+################################################################################
+#
+# Version check
+#
+$VERSION = do { my @r =(q$Revision$ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
 ################################################################################
 #
 # Export
@@ -38,6 +45,7 @@ use base qw(Exporter);
   violent_unlock_file
   set_master_lock
   release_file
+  file_removed
 );
 
 %EXPORT_TAGS = (
@@ -54,7 +62,7 @@ use base qw(Exporter);
   ALL   => \@EXPORT_OK
 );
 
-### sub ~file ($) ##############################################################
+### ~file () ###################################################################
 #
 # create lock file names
 #
@@ -76,7 +84,7 @@ sub masterlockfile ($) {
 # Windows section (no symlinks)
 #
 
-### sub w_lock_file ($;$) ######################################################
+### w_lock_file () #############################################################
 #
 # set read lock (shared lock)
 # (for no-symlink-systems)
@@ -114,7 +122,7 @@ sub w_lock_file ($;$) {
   0;
 }
 
-### sub w_unlock_file ($;$) ####################################################
+### w_unlock_file () ###########################################################
 #
 # remove read lock (shared lock)
 # (for no-symlink-systems)
@@ -138,7 +146,7 @@ sub w_unlock_file ($;$) {
 
         # try do decrement the reference counter
         #
-        if (set_ref($filename,-1,$timeout)) {
+        if (set_ref($filename, -1, $timeout)) {
           delete $LOCKED{$filename};
           return 1;
         }
@@ -150,7 +158,7 @@ sub w_unlock_file ($;$) {
   return;
 }
 
-### sub w_write_lock_file ($;$) ################################################
+### w_write_lock_file () #######################################################
 #
 # set write lock (exclusive lock)
 # (for no-symlink-systems)
@@ -213,7 +221,7 @@ sub w_write_lock_file ($;$) {
   0;
 }
 
-### sub w_write_unlock_file ($;$) ##############################################
+### w_write_unlock_file () #####################################################
 #
 # remove write lock (exclusive lock)
 # (for no-symlink-systems)
@@ -243,7 +251,7 @@ sub w_write_unlock_file ($;$) {
   1;
 }
 
-### sub w_violent_unlock_file ($) ##############################################
+### w_violent_unlock_file () ###################################################
 #
 # remove any lock violent  (excl. master lock)
 # (for no-symlink-systems)
@@ -275,7 +283,7 @@ sub w_violent_unlock_file ($) {
   return;
 }
 
-### sub w_set_master_lock ($;$) ################################################
+### w_set_master_lock () #######################################################
 #
 # set master lock
 # (for no-symlink-systems)
@@ -301,7 +309,7 @@ sub w_set_master_lock ($;$) {
   return;
 }
 
-### sub w_release_file ($) #####################################################
+### w_release_file () ##########################################################
 #
 # remove any locks (incl. master lock)
 # (for no-symlink-systems)
@@ -325,12 +333,21 @@ sub w_release_file ($) {
   1;
 }
 
+sub w_file_removed ($) {
+  my $filename = shift;
+
+  unlink reffile($filename);
+  unlink lockfile($filename);
+  unlink lockfile(reffile($filename));
+  unlink masterlockfile($filename);
+}
+
 ################################################################################
 #
 # *n*x section (symlinks possible)
 #
 
-### sub x_lock_file ($;$) ######################################################
+### x_lock_file () #############################################################
 #
 # set read lock (shared lock)
 # (symlinks possible)
@@ -368,7 +385,7 @@ sub x_lock_file ($;$) {
   0;
 }
 
-### sub x_unlock_file ($;$) ####################################################
+### x_unlock_file () ###########################################################
 #
 # remove read lock (shared lock)
 # (symlinks possible)
@@ -403,7 +420,7 @@ sub x_unlock_file ($;$) {
   }
 }
 
-### sub x_write_lock_file ($;$) ################################################
+### x_write_lock_file () #######################################################
 #
 # set write lock (exclusive lock)
 # (symlinks possible)
@@ -470,7 +487,7 @@ sub x_write_lock_file ($;$) {
   0;
 }
 
-### sub x_write_unlock_file ($;$) ##############################################
+### x_write_unlock_file () #####################################################
 #
 # remove write lock (exclusive lock)
 # (symlinks possible)
@@ -499,7 +516,7 @@ sub x_write_unlock_file ($;$) {
   1;
 }
 
-### sub x_violent_unlock_file ($) ##############################################
+### x_violent_unlock_file () ###################################################
 #
 # remove any lock violent  (excl. master lock)
 # (symlinks possible)
@@ -534,7 +551,7 @@ sub x_violent_unlock_file ($) {
     delete $LOCKED{$filename};
 }
 
-### sub x_set_master_lock ($;$) ################################################
+### x_set_master_lock () #######################################################
 #
 # set master lock
 # (symlinks possible)
@@ -560,7 +577,7 @@ sub x_set_master_lock ($;$) {
   return;
 }
 
-### sub x_release_file ($) #####################################################
+### x_release_file () ##########################################################
 #
 # remove any locks (incl. master lock)
 # (symlinks possible)
@@ -584,8 +601,12 @@ sub x_release_file ($) {
   1;
 }
 
-### sub w_simple_lock ($;$) ####################################################
-### sub w_simple_unlock ($) ####################################################
+sub x_file_removed ($) {
+  release_file (shift);
+}
+
+### w_simple_lock () ###########################################################
+### w_simple_unlock () #########################################################
 #
 # simple file lock/unlock
 # (for no-symlink-systems: kill/create lockfile)
@@ -600,7 +621,7 @@ sub w_simple_lock ($;$) {
   my $timeout  = shift || $Timeout;
   my $lockfile = lockfile $filename;
 
-  for (1..$timeout) {
+  for (0..$timeout) {
     unlink $lockfile and return 1;
     sleep(1);
   }
@@ -624,8 +645,8 @@ sub w_simple_unlock ($) {
   return;
 }
 
-### sub x_simple_lock ($;$) ####################################################
-### sub x_simple_unlock ($) ####################################################
+### x_simple_lock () ###########################################################
+### x_simple_unlock () #########################################################
 #
 # simple file lock/unlock
 # (symlinks possible: create/unlink symlink)
@@ -640,7 +661,7 @@ sub x_simple_lock ($;$) {
   my $timeout  = shift || $Timeout;
   my $lockfile = lockfile $filename;
 
-  for (1..$timeout) {
+  for (0..$timeout) {
     symlink $filename,$lockfile and return 1;
     sleep(1);
   }
@@ -659,7 +680,7 @@ sub x_simple_unlock ($) {
   return;
 }
 
-### sub w_set_ref ($$$) ########################################################
+### w_set_ref () ###############################################################
 #
 # add $_[1] to reference counter
 # (may be negative...)
@@ -702,7 +723,7 @@ sub w_set_ref ($$$) {
     unlink $reffile                                       or return;
   }
   else {
-    local $\="\n";
+    local $\;
     sysopen (REF, $reffile, O_WRONLY | O_TRUNC | O_CREAT) or return;
     print REF $old                                        or do {
                                                             close REF;
@@ -719,7 +740,7 @@ sub w_set_ref ($$$) {
   1;
 }
 
-### sub x_set_ref ($$$) ########################################################
+### x_set_ref () ###############################################################
 #
 # add $_[1] to reference counter
 # (may be negative...)
@@ -761,7 +782,7 @@ sub x_set_ref ($$$) {
     unlink $reffile                                       or return;
   }
   else {
-    local $\="\n";
+    local $\;
     sysopen (REF, $reffile, O_WRONLY | O_TRUNC | O_CREAT) or return;
     print REF $old                                        or do {
                                                             close REF;
@@ -778,7 +799,7 @@ sub x_set_ref ($$$) {
   1;
 }
 
-### sub get_ref ($) ############################################################
+### get_ref () #################################################################
 #
 # read out the reference counter
 # (system independant)
@@ -793,16 +814,14 @@ sub get_ref ($) {
   my $reffile  = reffile $filename;
   my $old;
   local *REF;
+  local $/;
 
-  if (sysopen (REF, $reffile, O_RDONLY)) {
-    local $/="\n";
-    read REF, $old, -s $reffile;
-    close REF;
-    chomp $old;
-  }
+  sysopen (REF, $reffile, O_RDONLY)    or return 0;
+    $old = <REF>;
+  close REF;
 
   # return value
-  $old or 0;
+  $old;
 }
 
 ################################################################################
@@ -831,6 +850,7 @@ BEGIN {
     *violent_unlock_file = \&x_violent_unlock_file;
     *set_master_lock     = \&x_set_master_lock;
     *release_file        = \&x_release_file;
+    *file_removed        = \&x_file_removed;
 
     *simple_lock         = \&x_simple_lock;
     *simple_unlock       = \&x_simple_unlock;
@@ -845,6 +865,7 @@ BEGIN {
     *violent_unlock_file = \&w_violent_unlock_file;
     *set_master_lock     = \&w_set_master_lock;
     *release_file        = \&w_release_file;
+    *file_removed        = \&w_file_removed;
 
     *simple_lock         = \&w_simple_lock;
     *simple_unlock       = \&w_simple_unlock;
@@ -852,7 +873,7 @@ BEGIN {
   }
 }
 
-# keeping require happy
+# keep 'require' happy
 1;
 
 #

patrick-canterino.de