Diff for /loncom/LONCAPA.pm between versions 1.10 and 1.11

version 1.10, 2006/06/27 15:21:28 version 1.11, 2006/06/27 21:47:15
Line 229  sub _do_hash_untie { Line 229  sub _do_hash_untie {
 {  {
     my $sym;      my $sym;
     my @pushed_syms;      my @pushed_syms;
   
       sub clean_sym {
    undef($sym);
       }
     sub push_locking_hash_tie {      sub push_locking_hash_tie {
  if (!defined($sym)) {   if (!defined($sym)) {
     die("Invalid used of push_locking_hash_tie, should only be called after a lock has occurred and before and unlock.");      die("Invalid used of push_locking_hash_tie, should only be called after a lock has occurred and before and unlock.");
Line 247  sub _do_hash_untie { Line 251  sub _do_hash_untie {
     sub _locking_hash_tie {      sub _locking_hash_tie {
  my ($file_prefix,$namespace,$how,$loghead,$what) = @_;   my ($file_prefix,$namespace,$how,$loghead,$what) = @_;
  if (defined($sym)) {   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;          my $lock_type=LOCK_SH;
Line 261  sub _do_hash_untie { Line 265  sub _do_hash_untie {
                if ((! -e "$file_prefix.db") && (! -e "$file_prefix.db.gz")) {                 if ((! -e "$file_prefix.db") && (! -e "$file_prefix.db.gz")) {
 # No such file. Forget it.                  # No such file. Forget it.                
                    $! = 2;                     $! = 2;
      &clean_sym();
                    return undef;                     return undef;
                }                 }
 # Apparently just no lock file yet. Make one  # Apparently just no lock file yet. Make one
Line 268  sub _do_hash_untie { Line 273  sub _do_hash_untie {
            }             }
 # Do a shared lock  # Do a shared lock
            if (!&flock_sym(LOCK_SH)) {              if (!&flock_sym(LOCK_SH)) { 
          &clean_sym();
        return undef;          return undef; 
    }      } 
 # If this is compressed, we will actually need an exclusive lock  # If this is compressed, we will actually need an exclusive lock
    if (-e "$file_prefix.db.gz") {     if (-e "$file_prefix.db.gz") {
        if (!&flock_sym(LOCK_EX)) {         if (!&flock_sym(LOCK_EX)) {
      &clean_sym();
    return undef;     return undef;
        }         }
    }     }
Line 281  sub _do_hash_untie { Line 288  sub _do_hash_untie {
            open($sym,">>$file_prefix.db.lock");             open($sym,">>$file_prefix.db.lock");
 # Writing needs exclusive lock  # Writing needs exclusive lock
            if (!&flock_sym(LOCK_EX)) {             if (!&flock_sym(LOCK_EX)) {
          &clean_sym();
        return undef;         return undef;
    }     }
         } else {          } else {
Line 326  sub _do_hash_untie { Line 334  sub _do_hash_untie {
  my $result = untie(%$hashref);   my $result = untie(%$hashref);
  flock($sym,LOCK_UN);   flock($sym,LOCK_UN);
  close($sym);   close($sym);
  undef($sym);   &clean_sym();
  return $result;   return $result;
     }      }
 }  }

Removed from v.1.10  
changed lines
  Added in v.1.11


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>