--- rat/lonuserstate.pm 2005/03/15 17:25:51 1.86 +++ rat/lonuserstate.pm 2005/03/18 21:55:49 1.88 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Construct and maintain state and binary representation of course for user # -# $Id: lonuserstate.pm,v 1.86 2005/03/15 17:25:51 albertel Exp $ +# $Id: lonuserstate.pm,v 1.88 2005/03/18 21:55:49 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -32,7 +32,6 @@ package Apache::lonuserstate; # ------------------------------------------------- modules used by this module use strict; use Apache::Constants qw(:common :http); -use Apache::File; use HTML::TokeParser; use Apache::lonnet(); use Apache::loncommon(); @@ -540,8 +539,8 @@ sub readmap { return 'No course data available.'; } @cond=('true:normal'); - unlink($fn.'.db'); - unlink($fn.'_symb.db'); + #unlink($fn.'.db'); + #unlink($fn.'_symb.db'); unlink($fn.'.state'); unlink($fn.'parms.db'); undef %randompick; @@ -589,7 +588,7 @@ sub readmap { # ---------------------------------------------------- Store away initial state { my $cfh; - if ($cfh=Apache::File->new(">$fn.state")) { + if (open($cfh,">$fn.state")) { print $cfh join("\n",@cond); } else { &Apache::lonnet::logthis("WARNING: ". @@ -597,8 +596,33 @@ sub readmap { } } } else { + # if we are here it is likely because we are already trying to + # initialize the course in another child, busy wait trying to + # tie the hashes for the next 90 seconds, if we succeed forward + # them on to navmaps, if we fail, throw up the Could not init + # course screen + untie(%hash); + untie(%parmhash); &Apache::lonnet::logthis("WARNING: ". "Could not tie coursemap $fn for $uri."); + my $i=0; + while($i<90) { + $i++; + sleep(1); + if ((tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640))) { + if (tie(%parmhash,'GDBM_File',$fn.'_parms.db',&GDBM_READER(),0640)) { + $retfurl='/adm/navmaps'; + &Apache::lonnet::appenv("request.course.id" => $short, + "request.course.fn" => $fn, + "request.course.uri" => $uri); + untie(%hash); + untie(%parmhash); + last; + } + } + untie(%hash); + untie(%parmhash); + } } &Apache::lonmsg::author_res_msg($ENV{'request.course.uri'},$errtext); # ------------------------------------------------- Check for critical messages