Index: trunk/Ohana/src/opihi/pcontrol/CheckBusyJob.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/CheckBusyJob.c	(revision 3212)
+++ trunk/Ohana/src/opihi/pcontrol/CheckBusyJob.c	(revision 4450)
@@ -5,4 +5,5 @@
   int      i;
   int      status;
+  int      outstate;
   char    *p;
   char     string[64];
@@ -11,6 +12,5 @@
 
   /** must have a valid host : if not? **/
-  host = job[0].host;
-  /*** why is this a type error? ***/
+  host = (Host *) job[0].host;
 
   InitIOBuffer (&buffer, 0x100);
@@ -34,5 +34,5 @@
 
     case PCLIENT_GOOD:
-      fprintf (stderr, "message received (CheckBusyJob)\n");  
+      /* fprintf (stderr, "message received (CheckBusyJob)\n");   */
       break;
 
@@ -60,25 +60,26 @@
   }
 
-  /** job has exited : move to DONE stack (host still BUSY) **/
-  if (!strcmp(string, "EXIT")) {
-    p = memstr (buffer.buffer, "EXITST", buffer.Nbuffer);
-    sscanf (p, "%*s %d", &job[0].exit_status);
-    PutJob (job, PCONTROL_JOB_DONE, STACK_BOTTOM);
-    job[0].state = PCONTROL_JOB_EXIT;
-    FreeIOBuffer (&buffer);
-    return (TRUE);
-  }
-  /** job has crashed : move to DONE stack (host still BUSY) */
-  if (!strcmp(string, "CRASH")) {
-    p = memstr (buffer.buffer, "EXITST", buffer.Nbuffer);
-    sscanf (p, "%*s %d", &job[0].exit_status);
-    PutJob (job, PCONTROL_JOB_DONE, STACK_BOTTOM);
-    job[0].state = PCONTROL_JOB_CRASH;
-    FreeIOBuffer (&buffer);
-    return (TRUE);
+  /* exit status better be either EXIT or CRASH */
+  outstate = PCONTROL_JOB_BUSY;
+  if (!strcmp(string, "EXIT")) outstate = PCONTROL_JOB_EXIT;
+  if (!strcmp(string, "CRASH")) outstate = PCONTROL_JOB_CRASH;
+  if (outstate == PCONTROL_JOB_BUSY) {
+    fprintf (stderr, "programming error : should not reach here (CheckJob)\n");
+    exit (1);
   }
 
-  fprintf (stderr, "programming error : should not reach here (CheckJob)\n");
-  exit (1);
+  /* parse the exit status and sizes of output buffers */
+  p = memstr (buffer.buffer, "EXITST", buffer.Nbuffer);
+  sscanf (p, "%*s %d", &job[0].exit_status);
+  p = memstr (buffer.buffer, "STDOUT", buffer.Nbuffer);
+  sscanf (p, "%*s %d", &job[0].stdout_size);
+  p = memstr (buffer.buffer, "STDERR", buffer.Nbuffer);
+  sscanf (p, "%*s %d", &job[0].stderr_size);
+
+  /** job has exited : move to DONE stack (host still BUSY) **/
+  PutJob (job, PCONTROL_JOB_DONE, STACK_BOTTOM);
+  job[0].state = outstate;
+  FreeIOBuffer (&buffer);
+  return (TRUE);
 }
 
