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

version 1.6, 2006/06/19 09:35:08 version 1.9, 2006/06/27 14:49:29
Line 40  my $loncapa_max_wait_time = 13; Line 40  my $loncapa_max_wait_time = 13;
   
 require Exporter;  require Exporter;
 our @ISA = qw (Exporter);  our @ISA = qw (Exporter);
 our @EXPORT = qw(&add_get_param &escape &unescape &tie_domain_hash &untie_domain_hash &tie_user_hash &untie_user_hash &propath);  our @EXPORT = qw(&escape_LaTeX &add_get_param &escape &unescape &tie_domain_hash &untie_domain_hash &tie_user_hash &untie_user_hash &propath);
 my %perlvar;  my %perlvar;
   
   # Escape a LaTeX string of special characters that according to LaTeX line by line
   # pg 9 are: # $ % & \ ^ _ { } ~  These are escaped by prepending a \
   #
   sub escape_LaTeX {
       my ($string) = @_;
       $string =~ s/[\#\$\%\&\\^_{}]/\\$&/g;
       return $string;
   }
   
   
 # Inputs are a url, and a hash ref of  # Inputs are a url, and a hash ref of
 # form name => value pairs  # form name => value pairs
 # takes care of properly adding the form name elements and values to the   # takes care of properly adding the form name elements and values to the 
Line 173  sub untie_user_hash { Line 183  sub untie_user_hash {
 sub locking_hash_tie {  sub locking_hash_tie {
     my ($filename,$how)=@_;      my ($filename,$how)=@_;
     my ($file_prefix,$namespace)=&db_filename_parts($filename);      my ($file_prefix,$namespace)=&db_filename_parts($filename);
     unless ($namespace) { return undef; }      if ($namespace eq '') { return undef; }
     return &_locking_hash_tie($file_prefix,$namespace,$how);      return &_locking_hash_tie($file_prefix,$namespace,$how);
 }  }
   
Line 184  sub locking_hash_untie { Line 194  sub locking_hash_untie {
 sub db_filename_parts {  sub db_filename_parts {
     my ($filename)=@_;      my ($filename)=@_;
     my ($file_path,$namespace)=($filename=~/^(.*)\/([^\/]+)\.db$/);      my ($file_path,$namespace)=($filename=~/^(.*)\/([^\/]+)\.db$/);
     unless ($namespace) { return undef; }      if ($namespace eq '') { return undef; }
     return ($file_path.'/'.$namespace,$namespace);      return ($file_path.'/'.$namespace,$namespace);
 }  }
   
Line 221  sub _do_hash_untie { Line 231  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)) {
       die('Nested locking attempted, this is unsupportted');
    }
   
         my $lock_type=LOCK_SH;          my $lock_type=LOCK_SH;
 # Are we reading or writing?  # Are we reading or writing?
         if ($how eq &GDBM_READER()) {          if ($how eq &GDBM_READER()) {
Line 238  sub _do_hash_untie { Line 252  sub _do_hash_untie {
                open($sym,">>$file_prefix.db.lock");                 open($sym,">>$file_prefix.db.lock");
            }             }
 # Do a shared lock  # Do a shared lock
            if (!&flock_sym(LOCK_SH)) { return undef; }              if (!&flock_sym(LOCK_SH)) { 
          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)) { return undef; }         if (!&flock_sym(LOCK_EX)) {
      return undef;
          }
    }     }
         } elsif ($how eq &GDBM_WRCREAT()) {          } elsif ($how eq &GDBM_WRCREAT()) {
 # We are writing  # We are writing
            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)) { return undef; }             if (!&flock_sym(LOCK_EX)) {
          return undef;
      }
         } else {          } else {
            die("Unknown method $how for $file_prefix");             die("Unknown method $how for $file_prefix");
         }          }

Removed from v.1.6  
changed lines
  Added in v.1.9


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