[LON-CAPA-cvs] cvs: modules /gerd/maxima lonmaxima
www
lon-capa-cvs@mail.lon-capa.org
Thu, 09 Mar 2006 21:38:29 -0000
www Thu Mar 9 16:38:29 2006 EDT
Modified files:
/modules/gerd/maxima lonmaxima
Log:
Error processing, resetting
Index: modules/gerd/maxima/lonmaxima
diff -u modules/gerd/maxima/lonmaxima:1.16 modules/gerd/maxima/lonmaxima:1.17
--- modules/gerd/maxima/lonmaxima:1.16 Wed Mar 8 17:30:11 2006
+++ modules/gerd/maxima/lonmaxima Thu Mar 9 16:38:26 2006
@@ -3,7 +3,7 @@
# The LearningOnline Network with CAPA
# Connect to MAXIMA CAS
#
-# $Id: lonmaxima,v 1.16 2006/03/08 22:30:11 www Exp $
+# $Id: lonmaxima,v 1.17 2006/03/09 21:38:26 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -44,7 +44,7 @@
# global variables
my $PREFORK = 5; # number of children to maintain
-my $MAX_CLIENTS_PER_CHILD = 5; # number of clients each child should process
+my $MAX_CLIENTS_PER_CHILD = 50; # number of clients each child should process
my %children = (); # keys are current child process IDs
my $children = 0; # current number of children
my $status; # string for current status
@@ -243,6 +243,8 @@
sigprocmask(SIG_UNBLOCK, $sigset)
or die("Can't unblock SIGINT for fork: $!\n");
+ &logthis('New process started');
+
my $command=Expect->spawn('maxima');
$command->log_stdout(0);
@@ -251,10 +253,20 @@
for (my $i=0; $i < $MAX_CLIENTS_PER_CHILD; $i++) {
&status('Accepting connections');
my $client = $server->accept() or last;
+ print $command "kill(all);reset();\n";
+ &getmaximaoutput($command);
while (my $cmd=<$client>) {
&status('Processing command');
- print $command &unescape($cmd).";\n";
- print $client &escape(&getmaximaoutput($command))."\n";
+ print $command &unescape($cmd);
+ my $reply=&getmaximaoutput($command);
+ print $client &escape($reply)."\n";
+ if ($reply=~/^Error\:/) {
+ &logthis('Died through '.$reply);
+ $client->close();
+ $command->hard_close();
+ exit;
+ }
+ &status('Waiting for commands');
}
}
@@ -271,7 +283,10 @@
sub getmaximaoutput {
my ($command)=@_;
- my (undef,undef,undef,$output)=$command->expect(20, -re => '\(\%i\d+\)');
+ my (undef,$error,undef,$output)=$command->expect(20, -re => '\(\%i\d+\)');
+ if ($error) {
+ return 'Error: '.$error;
+ }
my $foundoutput=0;
my $realoutput='';
foreach my $line (split(/\n/,$output)) {