--- loncom/lonnet/perl/lonnet.pm 2006/09/28 20:03:55 1.785 +++ loncom/lonnet/perl/lonnet.pm 2006/09/28 21:24:56 1.786 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.785 2006/09/28 20:03:55 albertel Exp $ +# $Id: lonnet.pm,v 1.786 2006/09/28 21:24:56 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -303,6 +303,9 @@ sub convert_and_load_session_env { } my %temp_env; foreach my $line (@profile) { + if ($line !~ m/=/) { + return 0; + } chomp($line); my ($envname,$envvalue)=split(/=/,$line,2); $temp_env{&unescape($envname)} = &unescape($envvalue); @@ -314,6 +317,7 @@ sub convert_and_load_session_env { @env{keys(%temp_env)} = @disk_env{keys(%temp_env)}; untie(%disk_env); } + return 1; } # ------------------------------------------- Transfer profile into environment @@ -329,15 +333,25 @@ sub transfer_profile_to_env { ($handle) = ($env{'user.environment'} =~m|/([^/]+)\.id$| ); } - my %remove; - if (tie(my %disk_env,'GDBM_File',"$lonidsdir/$handle.id",&GDBM_READER(), - 0640)) { - @env{keys(%disk_env)} = @disk_env{keys(%disk_env)}; - untie(%disk_env); - } else { - &convert_and_load_session_env($lonidsdir,$handle); + my $convert; + { + open(my $idf,"$lonidsdir/$handle.id"); + flock($idf,LOCK_SH); + if (tie(my %disk_env,'GDBM_File',"$lonidsdir/$handle.id", + &GDBM_READER(),0640)) { + @env{keys(%disk_env)} = @disk_env{keys(%disk_env)}; + untie(%disk_env); + } else { + $convert = 1; + } + } + if ($convert) { + if (!&convert_and_load_session_env($lonidsdir,$handle)) { + &logthis("Failed to load session, or convert session."); + } } + my %remove; while ( my $envname = each(%env) ) { if (my ($key,$time) = ($envname =~ /^(cgi\.(\d+)_\d+\.)/)) { if ($time < time-300) {