]> git.p6c8.net - selfforum.git/commitdiff
integrated new version of Lock.pm
authorndparker <>
Sat, 23 Jun 2001 00:31:25 +0000 (00:31 +0000)
committerndparker <>
Sat, 23 Jun 2001 00:31:25 +0000 (00:31 +0000)
Lock::Handle: added methods 'open' and 'close'

selfforum-cgi/shared/Arc/Archive.pm
selfforum-cgi/shared/Lock/Handle.pm
selfforum-cgi/shared/Posting/Cache.pm
selfforum-cgi/shared/Posting/Write.pm
selfforum-cgi/user/fo_posting.pl

index 9e3ccb911d87351814b3f1db4fcfc6cda35d9c5c..cb56877194fc896228fc7e620d6767794b27e630 100644 (file)
@@ -17,7 +17,7 @@ use vars qw(
 );
 
 use Arc::Test;
-use Lock          qw(:ALL);
+use Lock;
 use Posting::_lib qw(
   get_all_threads
   create_forum_xml_string
@@ -62,15 +62,17 @@ sub cut_tail ($) {
   if ( $param->{adminDefault}->{Severance}->{severance} ne 'instant'
     or $param->{adminDefault}->{Instant}->{execute}
   ) {
-    if (write_lock_file($param->{lockFile}, 1)) {
-      if (write_lock_file ($param->{forumFile})) {
+    my $sev = new Lock ($param->{lockFile});
+    if ($sev -> lock(LH_EXCL)) {
+      my $forum = new Lock ($param->{forumFile});
+      if ($forum -> lock (LH_EXCL)) {
         my (
           $threads,
           $last_thread,
           $last_message,
           $dtd,
           undef
-        ) = get_all_threads ($param->{forumFile}, KEEP_DELETED);
+        ) = get_all_threads ($forum->filename, KEEP_DELETED);
 
         my $obsolete = get_obsolete_threads ({
           parsedThreads => $threads,
@@ -91,10 +93,10 @@ sub cut_tail ($) {
         );
         if ($saved) {
           for (@$obsolete) {
-            set_master_lock ($param->{messagePath}."t$_.xml") or $failed{$_} = 'could not set master lock';
+            new Lock($param->{messagePath}."t$_.xml")->lock(LH_MASTER) or $failed{$_} = 'could not set master lock';
           }
         }
-        violent_unlock_file ($param->{forumFile}) unless (write_unlock_file ($param->{forumFile}));
+        $forum -> unlock;
 
         if ($saved) {
           # now process thread files
@@ -181,9 +183,9 @@ sub cut_tail ($) {
                       my $monthpath = $monthdir . '/';
                       my $file = $monthpath . "t$tid.xml";
 
-                      mkdir $yeardir, 0777 unless (-d $yeardir);
+                      mkdir $yeardir unless (-d $yeardir);
                       if (-d $yeardir) {
-                        mkdir $monthdir, 0777 unless (-d $monthdir);
+                        mkdir $monthdir unless (-d $monthdir);
                         if (-d $monthdir) {
                           save_file (
                             $file,
@@ -210,19 +212,13 @@ sub cut_tail ($) {
           #
           for (grep {not exists($failed{$_})} @$obsolete) {
             unlink ($param->{messagePath}."t$_.xml") or $failed{$_} = 'could not delete thread file';
-            file_removed ($param->{messagePath}."t$_.xml");
+            #file_removed ($param->{messagePath}."t$_.xml");
           }
           $cache -> delete_threads (@$obsolete);
           $cache -> garbage_collection;
         }
       }
-      else {
-        violent_unlock_file ($param->{forumFile});
-      }
-      violent_unlock_file ($param->{lockFile}) unless (write_unlock_file ($param->{lockFile}));
-    }
-    else {
-      violent_unlock_file ($param->{lockFile});
+      $sev -> unlock;
     }
   }
 
index e5a749e94e790bfa9cfa1d431305dec862f767e5..3287f6f179076dfbb994b89f4fd090b41dee3c96 100644 (file)
@@ -44,6 +44,36 @@ sub new {
   $self;
 }
 
+### open () ####################################################################
+#
+# open a file
+#
+# Params: $mode - open mode
+#
+# Return: success code (boolean)
+#
+sub open {
+  my ($self, $mode) = @_;
+
+  return unless defined ($mode);
+
+  sysopen ($self, $self->filename, $mode);
+}
+
+### close () ###################################################################
+#
+# close a file
+#
+# Params: ~none~
+#
+# Return: success code (boolean)
+#
+sub close {
+  my $self = shift;
+
+  CORE::close $self;
+}
+
 ### sub _create_handle #########################################################
 #
 # create a globref
index b765a494a8f863fe7afa9fa912da736bec0341ef..8cd5fdf7248326f78c059abca7e1eaf3f5b82091 100644 (file)
@@ -4,7 +4,7 @@ package Posting::Cache;
 #                                                                              #
 # File:        shared/Posting/Cache.pm                                         #
 #                                                                              #
-# Authors:     AndrĂ© Malo <nd@o3media.de>, 2001-04-21                          #
+# Authors:     AndrĂ© Malo <nd@o3media.de>, 2001-06-22                          #
 #                                                                              #
 # Description: Views/Voting Cache class                                        #
 #                                                                              #
@@ -17,7 +17,7 @@ use vars qw(
 
 use Fcntl;
 use File::Path;
-use Lock qw(:ALL);
+use Lock;
 
 ################################################################################
 #
@@ -25,7 +25,7 @@ use Lock qw(:ALL);
 #
 $VERSION = do { my @r =(q$Revision$ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
 
-my $O_BINARY = eval 'local $SIG{__DIE__}; O_BINARY';
+my $O_BINARY = eval "O_BINARY";
 $O_BINARY = 0 if ($@);
 
 ### sub new ####################################################################
@@ -412,17 +412,14 @@ sub add_posting {
 }
 sub r_add_posting {
   my ($self, $handle, $param) = @_;
-  local *FILE;
+  my $newfile = new Lock ($self->cachefile($param));
   local $\;
 
   unless (-d $self -> threaddir($param)) {
     mkdir $self->threaddir($param), 0777             or return;
   }
-  sysopen (FILE,
-    $self->cachefile($param),
-    O_WRONLY | O_CREAT | O_TRUNC
-  )                                                  or return;
-  close FILE                                         or return;
+  $newfile -> open (O_WRONLY | O_CREAT | O_TRUNC)    or return;
+  $newfile -> close                                  or return;
 
   my $z;
   if (-s $handle) {
@@ -457,7 +454,7 @@ sub r_add_posting {
     'L4' => $param->{posting}, $param->{thread}, 0, 0
   )                                                  or return;
 
-  release_file ($self->cachefile($param));
+  $newfile -> release;
 
   1;
 }
@@ -475,29 +472,28 @@ sub r_add_posting {
 sub add_wrap {
   my ($self, $gosub, @param) = @_;
   my $status;
+  my $summary = new Lock ($self -> summaryfile);
 
-  unless (write_lock_file ($self->summaryfile)) {
-    violent_unlock_file ($self->summaryfile);
-    $self->set_error ('could not write-lock summary file '.$self->summaryfile);
+  unless ($summary -> lock (LH_EXCL)) {
+    $self->set_error ('could not write-lock summary file '.$summary -> filename);
   }
   else {
-    local *SUM;
-    unless (sysopen (SUM, $self->summaryfile, $O_BINARY | O_APPEND | O_CREAT | O_RDWR)) {
+    unless ($summary -> open($O_BINARY | O_APPEND | O_CREAT | O_RDWR)) {
       $self->set_error
-        ('could not open to read/write/append summary file '.$self->summaryfile);
+        ('could not open to read/write/append summary file '.$summary->filename);
     }
     else {
       $status = $gosub -> (
         $self,
-        \*SUM,
+        $summary,
         @param
       );
-      unless (close SUM) {
+      unless ($summary -> close) {
         $status=0;
-        $self->set_error('could not close summary file '.$self->summaryfile);
+        $self->set_error('could not close summary file '.$summary -> filename);
       }
     }
-    violent_unlock_file ($self->summaryfile) unless (write_unlock_file ($self->summaryfile));
+    $summary -> unlock;
   }
 
   # return
@@ -517,51 +513,48 @@ sub add_wrap {
 sub vote_wrap {
   my ($self, $gosub, $param) = @_;
   my $status;
+  my $summary = new Lock ($self -> summaryfile);
 
-  unless (write_lock_file ($self->summaryfile)) {
-    violent_unlock_file ($self->summaryfile);
-    $self->set_error ('could not write-lock summary file '.$self->summaryfile);
+  unless ($summary -> lock (LH_EXCL)) {
+    $self->set_error ('could not write-lock summary file '.$summary -> filename);
   }
   else {
-    local *S;
-    unless (sysopen (S, $self->summaryfile, O_RDWR | $O_BINARY)) {
-      $self->set_error ('could not open to read/write summary file '.$self->summaryfile);
+    unless ($summary -> open (O_RDWR | $O_BINARY)) {
+      $self->set_error ('could not open to read/write summary file '.$summary -> filename);
     }
     else {
       unless (-d $self->threaddir($param)) {
         mkdir $self->threaddir($param), 0777                     or return;
       }
-      my $filename = $self->cachefile($param);
+      my $cache = new Lock ($self->cachefile($param));
 
-      unless (write_lock_file ($filename)) {
-        violent_unlock_file ($filename);
-        $self->set_error ('could not write-lock cache file '.$filename);
+      unless ($cache -> lock (LH_EXCL)) {
+        $self->set_error ('could not write-lock cache file '.$cache -> filename);
       }
       else {
-        local *CACHE;
-        unless (sysopen (CACHE, $filename, O_APPEND | O_CREAT | O_RDWR)) {
-          $self->set_error ('could not open to read/write/append cache file '.$filename);
+        unless ($cache -> open (O_APPEND | O_CREAT | O_RDWR)) {
+          $self->set_error ('could not open to read/write/append cache file '.$cache -> filename);
         }
         else {
           $status = $gosub -> (
             $self,
-            \*S,
-            \*CACHE,
+            $summary,
+            $cache,
             $param
           );
-          unless (close CACHE) {
+          unless ($cache -> close) {
             $status=0;
-            $self->set_error('could not close cache file '.$filename);
+            $self->set_error('could not close cache file '.$cache -> filename);
           }
         }
-        violent_unlock_file ($filename) unless (write_unlock_file ($filename));
+        $cache -> unlock;
       }
-      unless (close S) {
+      unless ($summary -> close) {
         $status=0;
-        $self->set_error('could not close summary file '.$self->summaryfile);
+        $self->set_error('could not close summary file '.$summary -> filename);
       }
     }
-    violent_unlock_file ($self->summaryfile) unless (write_unlock_file ($self->summaryfile));
+    $summary -> unlock;
   }
 
   # return
@@ -581,46 +574,48 @@ sub vote_wrap {
 sub purge_wrap {
   my ($self, $gosub, @param) = @_;
   my $status;
-  my $filename = $self -> summaryfile . '.temp';
+  my $summary = new Lock ($self -> summaryfile);
 
-  unless (write_lock_file ($self->summaryfile)) {
-    violent_unlock_file ($self->summaryfile);
-    $self->set_error ('could not write-lock summary file '.$self->summaryfile);
+  unless ($summary -> lock (LH_EXSH)) {
+    $self->set_error ('could not write-lock summary file '.$summary -> filename);
   }
   else {
-    local *TEMP;
-    unless (sysopen (TEMP, $filename, O_CREAT | O_WRONLY | O_TRUNC | $O_BINARY)) {
-      $self->set_error ('could not open to write temp summary file '.$filename);
+    my $temp = new Lock::Handle ($summary -> filename . '.temp');
+    unless ($temp -> open (O_CREAT | O_WRONLY | O_TRUNC | $O_BINARY)) {
+      $self->set_error ('could not open to write temp summary file '.$temp -> filename);
     }
     else {
-      local *S;
-      unless (sysopen (S, $self->summaryfile, O_RDONLY | $O_BINARY)) {
-        $self->set_error ('could not open to read summary file '.$self->summaryfile);
+      unless ($summary -> open (O_RDONLY | $O_BINARY)) {
+        $self->set_error ('could not open to read summary file '.$summary -> filename);
       }
       else {
         $status = $gosub -> (
           $self,
-          \*S,
-          \*TEMP,
+          $summary,
+          $temp,
           @param
         );
-        unless (close S) {
+        unless ($summary -> close) {
           $status = 0;
-          $self->set_error('could not close summary file '.$self->summaryfile);
+          $self->set_error('could not close summary file '.$summary -> filename);
         }
       }
-      unless (close TEMP) {
+      unless ($temp -> close) {
+        $status=0;
+        $self->set_error('could not close temp summary file '.$temp -> filename);
+      }
+      unless ($summary -> lock (LH_EXCL)) {
         $status=0;
-        $self->set_error('could not close temp summary file '.$filename);
+        $self->set_error ('could not write-lock summary file '.$summary -> filename);
       }
       if ($status) {
-        unless (rename $filename => $self->summaryfile) {
+        unless (rename $temp -> filename => $summary -> filename) {
           $status=0;
-          $self->set_error('could not rename temp summary file '.$filename);
+          $self->set_error('could not rename temp summary file '.$temp -> filename);
         }
       }
     }
-    violent_unlock_file ($self->summaryfile) unless (write_unlock_file ($self->summaryfile));
+    $summary -> unlock;
   }
 
   # return
@@ -640,28 +635,27 @@ sub purge_wrap {
 sub pick_wrap {
   my ($self, $gosub, $filename, @param) = @_;
   my $status;
+  my $cache = new Lock ($filename);
 
-  unless (lock_file ($filename)) {
-    violent_unlock_file ($filename);
-    $self->set_error ('could not lock cache file '.$filename);
+  unless ($cache -> lock (LH_SHARED)) {
+    $self->set_error ('could not lock cache file '.$cache -> filename);
   }
   else {
-    local *CACHE;
-    unless (sysopen (CACHE, $filename, O_RDONLY)) {
-      $self->set_error ('could not open to read cache file '.$filename);
+    unless ($cache -> open (O_RDONLY)) {
+      $self->set_error ('could not open to read cache file '.$cache -> filename);
     }
     else {
       $status = $self -> read_wrap (
         $gosub,
-        \*CACHE,
+        $cache,
         @param
       );
-      unless (close CACHE) {
+      unless ($cache -> close) {
         $status=0;
-        $self->set_error('could not close cache file '.$filename);
+        $self->set_error('could not close cache file '.$cache -> filename);
       }
     }
-    violent_unlock_file ($filename) unless (unlock_file ($filename));
+    $cache -> unlock;
   }
 
   # return
@@ -681,28 +675,27 @@ sub pick_wrap {
 sub read_wrap {
   my ($self, $gosub, @param) = @_;
   my $status;
+  my $summary = new Lock ($self -> summaryfile);
 
-  unless (lock_file ($self->summaryfile)) {
-    violent_unlock_file ($self->summaryfile);
-    $self->set_error ('could not read-lock summary file '.$self->summaryfile);
+  unless ($summary -> lock (LH_SHARED)) {
+    $self->set_error ('could not read-lock summary file '.$summary -> filename);
   }
   else {
-    local *S;
-    unless (sysopen (S, $self->summaryfile, O_RDONLY | $O_BINARY)) {
-      $self->set_error ('could not open to read summary file '.$self->summaryfile);
+    unless ($summary -> open (O_RDONLY | $O_BINARY)) {
+      $self->set_error ('could not open to read summary file '.$summary -> filename);
     }
     else {
       $status = $gosub -> (
         $self,
-        \*S,
+        $summary,
         @param
       );
-      unless (close S) {
+      unless ($summary -> close) {
         $status=0;
-        $self->set_error('could not close summary file '.$self->summaryfile);
+        $self->set_error('could not close summary file '.$summary -> filename);
       }
     }
-    violent_unlock_file ($self->summaryfile) unless (unlock_file ($self->summaryfile));
+    $summary -> unlock;
   }
 
   # return
@@ -722,28 +715,27 @@ sub read_wrap {
 sub mod_wrap {
   my ($self, $gosub, @param) = @_;
   my $status;
+  my $summary = new Lock ($self -> summaryfile);
 
-  unless (write_lock_file ($self->summaryfile)) {
-    violent_unlock_file ($self->summaryfile);
-    $self->set_error ('could not write-lock summary file '.$self->summaryfile);
+  unless ($summary -> lock (LH_EXCL)) {
+    $self->set_error ('could not write-lock summary file '.$summary -> filename);
   }
   else {
-    local *S;
-    unless (sysopen (S, $self->summaryfile, O_RDWR | $O_BINARY)) {
-      $self->set_error ('could not open to read/write summary file '.$self->summaryfile);
+    unless ($summary -> open (O_RDWR | $O_BINARY)) {
+      $self->set_error ('could not open to read/write summary file '.$summary -> filename);
     }
     else {
       $status = $gosub -> (
         $self,
-        \*S,
+        $summary,
         @param
       );
-      unless (close S) {
+      unless ($summary -> close) {
         $status=0;
-        $self->set_error('could not close summary file '.$self->summaryfile);
+        $self->set_error('could not close summary file '.$summary -> filename);
       }
     }
-    violent_unlock_file ($self->summaryfile) unless (write_unlock_file ($self->summaryfile));
+    $summary -> unlock;
   }
 
   # return
index b7338f657a940b61ea0942612054a7d1c346361e..5670251bdb48ca8f047c929ba1892102d3dd9031 100644 (file)
@@ -19,10 +19,7 @@ use vars qw(
 
 use Encode::Plain; $Encode::Plain::utf8 = 1;
 use Encode::Posting;
-use Lock qw(
-  :WRITE
-  release_file
-);
+use Lock;
 use Posting::_lib qw(
   get_message_node
   get_message_header
@@ -126,7 +123,7 @@ sub write_new_thread ($) {
   );
 
   save_file ($param -> {forumFile}, $forum) or return $error{forumWrite};
-  release_file ($param -> {messagePath}.$tid.'.xml');
+  new Lock ($param -> {messagePath}.$tid.'.xml') -> release;
   return (0, $thread, $mid, $tid);
 }
 
@@ -145,25 +142,24 @@ sub write_reply_posting ($) {
   my $mid   = 'm'.($param -> {lastMessage} + 1);
   my $tid   = 't'.($param -> {thread});
 
-  my $tfile = $param -> {messagePath}.$tid.'.xml';
+  my $tfile = new Lock ($param -> {messagePath}.$tid.'.xml');
 
-  unless (write_lock_file ($tfile)) {
-    violent_unlock_file ($tfile);
+  unless ($tfile->lock(LH_EXCL)) {
     return $error{threadFile};
   }
 
   else {
-    my $xml = parse_xml_file ($tfile);
+    my $xml = parse_xml_file ($tfile->filename);
 
     unless ($xml) {
-      violent_unlock_file ($tfile) unless (write_unlock_file ($tfile));
+      $tfile -> unlock;
       return $error{threadFile};
     }
 
     my $mnode = get_message_node ($xml, $tid, 'm'.$param -> {parentMessage});
 
     unless (defined $mnode) {
-      violent_unlock_file ($tfile) unless (write_unlock_file ($tfile));
+      $tfile -> unlock;
       return $error{noParent};
     }
 
@@ -202,12 +198,12 @@ sub write_reply_posting ($) {
 
     # save thread file
     #
-    unless (save_file ($tfile, \($xml -> toString))) {
-      violent_unlock_file ($tfile) unless (write_unlock_file ($tfile));
+    unless (save_file ($tfile->filename, \($xml -> toString))) {
+      $tfile -> unlock;
       return $error{threadWrite};
     }
 
-    violent_unlock_file ($tfile) unless (write_unlock_file ($tfile));
+    $tfile -> unlock;
 
     $thread = $xml;
 
index 3126881d08c028735100323aca7d2b1697a4c373..d2a0a8f493bb1fca13401f3efbbed22050d30eef 100644 (file)
@@ -87,7 +87,7 @@ use Arc::Archive;
 use CheckRFC;
 use Encode::Plain; $Encode::Plain::utf8 = 1; # generally convert from UTF-8
 use Encode::Posting;
-use Lock          qw(:ALL);
+use Lock;
 use Posting::_lib qw(
   hr_time
   parse_xml_file
@@ -509,7 +509,7 @@ sub save {
   # unlock forum main file
   #
   if ($self -> {forum} -> {flocked}) {
-    violent_unlock_file($self -> {conf} -> {forum_file_name}) unless write_unlock_file ($self -> {conf} -> {forum_file_name});
+    $self -> {forum} -> {flocked} -> unlock;
     $self -> {forum} -> {flocked} = 0;
   }
 
@@ -547,13 +547,12 @@ sub parse_cgi {
 #
 sub load_main_file {
   my $self = shift;
-  my $lock_stat;
+  my $forum = new Lock ($self -> {conf} -> {forum_file_name});
 
-  unless ($lock_stat = write_lock_file ($self -> {conf} -> {forum_file_name})) {
-    if (defined $lock_stat) {
+  unless ($forum -> lock(LH_EXCL)) {
+    unless ($forum -> masterlocked) {
       # occupied or no w-bit set for the directory..., hmmm
       #
-      violent_unlock_file ($self -> {conf} -> {forum_file_name});
       $self -> {error} = {
         spec => 'occupied',
         type => 'repeat'
@@ -571,7 +570,7 @@ sub load_main_file {
     }
   }
   else {
-    $self -> {forum} -> {flocked} = 1;
+    $self -> {forum} -> {flocked} = $forum;
     ( $self -> {forum} -> {threads},
       $self -> {forum} -> {last_thread},
       $self -> {forum} -> {last_message},
@@ -849,13 +848,14 @@ sub check_cgi {
       if (exists ($formdata -> {$name {$_}} -> {type}) and $formdata -> {$name {$_}} -> {type} eq 'name') {
         $val_ww =~ y/a-zA-Z//cd;
 
-        my @badlist = map {qr/\Q$_/i} qw (
-          # insert badmatchlist here
-        );
+        my @badlist;
+#        my @badlist = map {qr/\Q$_/i} qw (
+#          # insert badmatchlist here
+#        );
 
-        push @badlist => map {qr/\b\Q$_\E\b/i} qw(
-          # insert badwordlist here
-        );
+#        push @badlist => map {qr/\b\Q$_\E\b/i} qw(
+#          # insert badwordlist here
+#        );
 
         for (@badlist) {
           if ($val_ww =~ /$_/) {
@@ -964,11 +964,11 @@ sub fetch {
   my $formdata = $self -> {conf} -> {form_data};
 
   if (@{$self -> {fetch}}) {
-    my $filename = $self -> {conf} -> {message_path}.'t'.$self -> {fup_tid}.'.xml';
+    my $thread = new Lock ($self -> {conf} -> {message_path}.'t'.$self -> {fup_tid}.'.xml');
 
-    if (lock_file ($filename)) {
-      my $xml = parse_xml_file ($filename);
-      violent_unlock_file($filename) unless unlock_file ($filename);
+    if ($thread -> lock (LH_SHARED)) {
+      my $xml = parse_xml_file ($thread -> filename);
+      $thread -> unlock;
 
       if ($xml) {
         my $mnode = get_message_node ($xml, 't'.$self -> {fup_tid}, 'm'.$self -> {fup_mid});

patrick-canterino.de