[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;
}
}