--- loncom/lond	2010/09/26 14:27:56	1.457
+++ loncom/lond	2010/11/12 19:12:46	1.465
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # lond "LON Daemon" Server (port "LOND" 5663)
 #
-# $Id: lond,v 1.457 2010/09/26 14:27:56 raeburn Exp $
+# $Id: lond,v 1.465 2010/11/12 19:12:46 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -58,7 +58,7 @@ my $DEBUG = 0;		       # Non zero to ena
 my $status='';
 my $lastlog='';
 
-my $VERSION='$Revision: 1.457 $'; #' stupid emacs
+my $VERSION='$Revision: 1.465 $'; #' stupid emacs
 my $remoteVERSION;
 my $currenthostid="default";
 my $currentdomainid;
@@ -1121,6 +1121,8 @@ sub establish_key_handler {
 sub load_handler {
     my ($cmd, $tail, $replyfd) = @_;
 
+
+
    # Get the load average from /proc/loadavg and calculate it as a percentage of
    # the allowed load limit as set by the perl global variable lonLoadLim
 
@@ -3202,6 +3204,7 @@ sub dump_with_regexp {
                         if (!$end || $end > $now) {
                             next unless (&releasereqd_check($cnum,$cdom,$key,$value,$major,
                                                             $minor,\%homecourses,\@ids));
+                        }
                     }
                 }
             }
@@ -4277,6 +4280,7 @@ sub put_domain_handler {
 sub get_domain_handler {
     my ($cmd, $tail, $client) = @_;
 
+
     my $userinput = "$client:$tail";
 
     my ($udom,$namespace,$what)=split(/:/,$tail,3);
@@ -4421,7 +4425,8 @@ sub get_id_handler {
 sub put_dcmail_handler {
     my ($cmd,$tail,$client) = @_;
     my $userinput = "$cmd:$tail";
-                                                                                
+
+
     my ($udom,$what)=split(/:/,$tail);
     chomp($what);
     my $hashref = &tie_domain_hash($udom, "nohist_dcmail", &GDBM_WRCREAT());
@@ -6232,7 +6237,7 @@ sub logstatus {
 sub initnewstatus {
     my $docdir=$perlvar{'lonDocRoot'};
     my $fh=IO::File->new(">$docdir/lon-status/londstatus.txt");
-    my $now=time;
+    my $now=time();
     my $local=localtime($now);
     print $fh "LOND status $local - parent $$\n\n";
     opendir(DIR,"$docdir/lon-status/londchld");
@@ -6382,6 +6387,7 @@ sub make_new_child {
             or die "Can't unblock SIGINT for fork: $!\n";
         $children{$pid} = $clientip;
         &status('Started child '.$pid);
+	close($client);
         return;
     } else {
         # Child can *not* return from this subroutine.
@@ -7363,18 +7369,26 @@ sub get_courseinfo_hash {
 sub check_homecourses {
     my ($homecourses,$udom,$regexp,$count,$range,$start,$end,$major,$minor) = @_;
     my ($result,%addtocache);
+    my $yesterday = time - 24*3600; 
     if (ref($homecourses) eq 'HASH') {
-        my %okcourses;
+        my (%okcourses,%courseinfo,%recent);
         my $hashref = &tie_domain_hash($udom, "nohist_courseids", &GDBM_WRCREAT());
         if ($hashref) {
             while (my ($key,$value) = each(%$hashref)) {
                 my $unesc_key = &unescape($key);
-                next if ($unesc_key =~ /^lasttime:/);
+                if ($unesc_key =~ /^lasttime:(\w+)$/) {
+                    my $cid = $1;
+                    $cid =~ s/_/:/;
+                    if ($value > $yesterday ) {
+                        $recent{$cid} = 1;
+                    }
+                    next;
+                }
                 my $items = &Apache::lonnet::thaw_unescape($value);
                 if (ref($items) eq 'HASH') {
                     my $hashid = $unesc_key;
                     $hashid =~ s/_/:/;
-                    &Apache::lonnet::do_cache_new('courseinfo',$hashid,$items,600);
+                    $courseinfo{$hashid} = $items;
                     if (ref($homecourses->{$hashid}) eq 'ARRAY') {
                         my ($reqdmajor,$reqdminor) = split(/\./,$items->{'releaserequired'});
                         if (&useable_role($reqdmajor,$reqdminor,$major,$minor)) {
@@ -7390,6 +7404,16 @@ sub check_homecourses {
             &logthis('Failed to tie hash for nohist_courseids.db');
             return;
         }
+        foreach my $hashid (keys(%recent)) {
+            my ($result,$cached)=&Apache::lonnet::is_cached_new('courseinfo',$hashid);
+            unless ($cached) {
+                &Apache::lonnet::do_cache_new('courseinfo',$hashid,$courseinfo{$hashid},600);
+            }
+        }
+        foreach my $hashid (keys(%{$homecourses})) {
+            next if ($recent{$hashid});
+            &Apache::lonnet::do_cache_new('courseinfo',$hashid,$courseinfo{$hashid},600);
+        }
         foreach my $hashid (keys(%okcourses)) {
             if (ref($homecourses->{$hashid}) eq 'ARRAY') {
                 foreach my $role (@{$homecourses->{$hashid}}) {