[LON-CAPA-cvs] cvs: loncom /lonnet/perl lonnet.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Thu, 28 Sep 2006 21:24:56 -0000
albertel Thu Sep 28 17:24:56 2006 EDT
Modified files:
/loncom/lonnet/perl lonnet.pm
Log:
- need to wait for lock on session env as there could be contention
- only do the conversion if it looks like its a text session env
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.785 loncom/lonnet/perl/lonnet.pm:1.786
--- loncom/lonnet/perl/lonnet.pm:1.785 Thu Sep 28 16:03:55 2006
+++ loncom/lonnet/perl/lonnet.pm Thu Sep 28 17:24:56 2006
@@ -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 @@
}
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 @@
@env{keys(%temp_env)} = @disk_env{keys(%temp_env)};
untie(%disk_env);
}
+ return 1;
}
# ------------------------------------------- Transfer profile into environment
@@ -329,15 +333,25 @@
($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) {