[LON-CAPA-cvs] cvs: loncom / LONCAPA.pm

albertel lon-capa-cvs@mail.lon-capa.org
Tue, 27 Jun 2006 21:47:16 -0000


albertel		Tue Jun 27 17:47:16 2006 EDT

  Modified files:              
    /loncom	LONCAPA.pm 
  Log:
  - early outs in the locking leave the sym witha value, cleaning it out now
  
  
Index: loncom/LONCAPA.pm
diff -u loncom/LONCAPA.pm:1.10 loncom/LONCAPA.pm:1.11
--- loncom/LONCAPA.pm:1.10	Tue Jun 27 11:21:28 2006
+++ loncom/LONCAPA.pm	Tue Jun 27 17:47:15 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Base routines
 #
-# $Id: LONCAPA.pm,v 1.10 2006/06/27 15:21:28 albertel Exp $
+# $Id: LONCAPA.pm,v 1.11 2006/06/27 21:47:15 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -229,6 +229,10 @@
 {
     my $sym;
     my @pushed_syms;
+
+    sub clean_sym {
+	undef($sym);
+    }
     sub push_locking_hash_tie {
 	if (!defined($sym)) {
 	    die("Invalid used of push_locking_hash_tie, should only be called after a lock has occurred and before and unlock.");
@@ -247,7 +251,7 @@
     sub _locking_hash_tie {
 	my ($file_prefix,$namespace,$how,$loghead,$what) = @_;
 	if (defined($sym)) {
-	    die('Nested locking attempted withut proper use of push_locking_hahs_tie, this is unsupportted');
+	    die('Nested locking attempted without proper use of push_locking_hash_tie, this is unsupported');
 	}
 
         my $lock_type=LOCK_SH;
@@ -261,6 +265,7 @@
                if ((! -e "$file_prefix.db") && (! -e "$file_prefix.db.gz")) {
 # No such file. Forget it.                
                    $! = 2;
+		   &clean_sym();
                    return undef;
                }
 # Apparently just no lock file yet. Make one
@@ -268,11 +273,13 @@
            }
 # Do a shared lock
            if (!&flock_sym(LOCK_SH)) { 
+	       &clean_sym();
 	       return undef; 
 	   } 
 # If this is compressed, we will actually need an exclusive lock
 	   if (-e "$file_prefix.db.gz") {
 	       if (!&flock_sym(LOCK_EX)) {
+		   &clean_sym();
 		   return undef;
 	       }
 	   }
@@ -281,6 +288,7 @@
            open($sym,">>$file_prefix.db.lock");
 # Writing needs exclusive lock
            if (!&flock_sym(LOCK_EX)) {
+	       &clean_sym();
 	       return undef;
 	   }
         } else {
@@ -326,7 +334,7 @@
 	my $result = untie(%$hashref);
 	flock($sym,LOCK_UN);
 	close($sym);
-	undef($sym);
+	&clean_sym();
 	return $result;
     }
 }