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

version 1.9, 2006/06/27 14:49:29 version 1.11, 2006/06/27 21:47:15
Line 228  sub _do_hash_untie { Line 228  sub _do_hash_untie {
   
 {  {
     my $sym;      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.");
    }
    push(@pushed_syms,$sym);
    undef($sym);
       }
   
       sub pop_locking_hash_tie {
    if (defined($sym)) {
       die("Invalid nested used of pop_locking_hash_tie, should only be called after a unlock has occurred.");
    }
    $sym = pop(@pushed_syms);
       }
   
     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, 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 246  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 253  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 266  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 311  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.9  
changed lines
  Added in v.1.11


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