--- rat/lonuserstate.pm 2005/03/15 17:25:51 1.86 +++ rat/lonuserstate.pm 2005/03/15 19:25:30 1.87 @@ -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.87 2005/03/15 19:25:30 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -540,8 +540,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; @@ -597,8 +597,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