--- loncom/lonnet/perl/lonnet.pm	2001/01/09 23:05:22	1.93
+++ loncom/lonnet/perl/lonnet.pm	2001/01/11 10:43:09	1.95
@@ -85,7 +85,7 @@
 # 05/01/01 Guy Albertelli
 # 05/01,06/01,09/01 Gerd Kortemeyer
 # 09/01 Guy Albertelli
-# 09/01 Gerd Kortemeyer
+# 09/01,10/01,11/01 Gerd Kortemeyer
 
 package Apache::lonnet;
 
@@ -245,18 +245,24 @@ sub appenv {
             $ENV{$_}=$newenv{$_};
         }
     } keys %newenv;
+
+    my $lockfh;
+    unless ($lockfh=Apache::File->new("$ENV{'user.environment'}")) {
+       return 'error';
+    }
+    unless (flock($lockfh,LOCK_EX)) {
+         &logthis("<font color=blue>WARNING: ".
+                  'Could not obtain exclusive lock in appenv: '.$!);
+         $lockfh->close();
+         return 'error: '.$!;
+    }
+
     my @oldenv;
     {
      my $fh;
      unless ($fh=Apache::File->new("$ENV{'user.environment'}")) {
 	return 'error';
      }
-     unless (flock($fh,LOCK_SH)) {
-         &logthis("<font color=blue>WARNING: ".
-                  'Could not obtain shared lock in appenv: '.$!);
-         $fh->close();
-         return 'error: '.$!;
-     }
      @oldenv=<$fh>;
      $fh->close();
     }
@@ -275,17 +281,13 @@ sub appenv {
 	return 'error';
      }
      my $newname;
-     unless (flock($fh,LOCK_EX)) {
-         &logthis("<font color=blue>WARNING: ".
-                  'Could not obtain exclusive lock in appenv: '.$!);
-         $fh->close();
-         return 'error: '.$!;
-     }
      foreach $newname (keys %newenv) {
 	 print $fh "$newname=$newenv{$newname}\n";
      }
      $fh->close();
     }
+
+    $lockfh->close();
     return 'ok';
 }
 # ----------------------------------------------------- Delete from Environment
@@ -1593,6 +1595,9 @@ sub EXT {
       if ($ENV{'request.course.id'}) {
 # ----------------------------------------------------- Cascading lookup scheme
        my $symbp=&symbread();
+       unless ($symbp) {
+           &logthis('No symb for '.$ENV{'request.filename'});
+       } 
        my $mapp=(split(/\_\_\_/,$symbp))[0];
 
        my $symbparm=$symbp.'.'.$spacequalifierrest;
@@ -1615,11 +1620,11 @@ sub EXT {
        my $courselevelm=
             $ENV{'request.course.id'}.'.'.$mapparm;
 
-
 # ----------------------------------------------------------- first, check user
       my %resourcedata=get('resourcedata',
                            ($courselevelr,$courselevelm,$courselevel));
-      if ($resourcedata{$courselevelr}!~/^error\:/) {
+      if (($resourcedata{$courselevelr}!~/^error\:/) &&
+          ($resourcedata{$courselevelr}!~/^con_lost/)) {
 
        if ($resourcedata{$courselevelr}) { 
           return $resourcedata{$courselevelr}; }
@@ -1627,7 +1632,15 @@ sub EXT {
           return $resourcedata{$courselevelm}; }
        if ($resourcedata{$courselevel}) { return $resourcedata{$courselevel}; }
 
+      } else {
+	  if ($resourcedata{$courselevelr}!~/No such file/) {
+	    &logthis("<font color=blue>WARNING:".
+		   " Trying to get resource data for ".$ENV{'user.name'}." at "
+                   .$ENV{'user.domain'}.": ".$resourcedata{$courselevelr}.
+                 "</font>");
+	  }
       }
+
 # -------------------------------------------------------- second, check course
         my $section='';
         if ($ENV{'request.course.sec'}) {
@@ -1645,7 +1658,16 @@ sub EXT {
 	      if ($_) { return &unescape($_); }
           } split(/\&/,$reply);
       }
-
+      if (($reply=~/^con_lost/) || ($reply=~/^error\:/)) {
+	  &logthis("<font color=blue>WARNING:".
+                " Getting ".$reply." asking for ".$varname." for ".
+                $ENV{'course.'.$ENV{'request.course.id'}.$section.'.num'}.
+                ' at '.
+                $ENV{'course.'.$ENV{'request.course.id'}.$section.'.domain'}.
+                ' from '.
+                $ENV{'course.'.$ENV{'request.course.id'}.$section.'.home'}.
+                 "</font>");
+      }
 # ------------------------------------------------------ third, check map parms
        my %parmhash=();
        my $thisparm='';