Index: trunk/Ohana/src/opihi/pantasks/CheckController.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/CheckController.c	(revision 4706)
+++ trunk/Ohana/src/opihi/pantasks/CheckController.c	(revision 4714)
@@ -7,8 +7,6 @@
   Job *job;
   IOBuffer buffer;
-  
 
   /* get the list of completed jobs (exit / crash), update the job status */
-
   if (!CheckControllerStatus()) return (TRUE);
 
@@ -21,20 +19,30 @@
   }
 
+  p = memstr (buffer.buffer, "USAGE: jobstack", buffer.Nbuffer);
+  if (p != NULL) {
+    FreeIOBuffer (&buffer);
+    return (FALSE);
+  }
+
   /** parse job list **/
-  sscanf (buffer.buffer, "%*s %s", &Njobs);
+  status = sscanf (buffer.buffer, "%*s %d", &Njobs);
+  if (status != 1) {
+    FreeIOBuffer (&buffer);
+    return (FALSE);
+  }
+
   p = buffer.buffer;
-  
   for (i = 0; i < Njobs; i++) {
     q = strchr (p, '\n');
     if (q == NULL) {
       fprintf (stderr, "controller message error: incomplete job list\n");
-      FreeIOBuffer (&buffer);
       break;
     }
-    p = q++;
-    sscanf (p, "%d", &JobID);
-    job = FindJob (JobID);
+    p = q + 1;
+    status = sscanf (p, "%d", &JobID);
+
+    job = FindControllerJob (JobID);
     if (job == NULL) {
-      fprintf (stderr, "misplaced job? %d not in job list\n");
+      fprintf (stderr, "misplaced job? %d not in EXIT job list\n", JobID);
       continue;
     }
@@ -42,7 +50,7 @@
     CheckControllerJob (job);
   }
-    
+ 
   /*** check CRASH jobs ***/
-  InitIOBuffer (&buffer, 0x100);
+  FlushIOBuffer (&buffer);
   status = ControllerCommand ("jobstack crash", CONTROLLER_PROMPT, &buffer);
   if (!status) {
@@ -50,21 +58,30 @@
     return (FALSE);
   }
+  p = memstr (buffer.buffer, "USAGE: jobstack", buffer.Nbuffer);
+  if (p != NULL) {
+    FreeIOBuffer (&buffer);
+    return (FALSE);
+  }
 
   /** parse job list **/
-  sscanf (buffer.buffer, "%*s %s", &Njobs);
+  status = sscanf (buffer.buffer, "%*s %d", &Njobs);
+  if (status != 1) {
+    FreeIOBuffer (&buffer);
+    return (FALSE);
+  }
+
   p = buffer.buffer;
-  
   for (i = 0; i < Njobs; i++) {
     q = strchr (p, '\n');
     if (q == NULL) {
       fprintf (stderr, "controller message error: incomplete job list\n");
-      FreeIOBuffer (&buffer);
       break;
     }
-    p = q++;
-    sscanf (p, "%d", &JobID);
-    job = FindJob (JobID);
+    p = q + 1;
+    
+    status = sscanf (p, "%d", &JobID);
+    job = FindControllerJob (JobID);
     if (job == NULL) {
-      fprintf (stderr, "misplaced job? %d not in job list\n");
+      fprintf (stderr, "misplaced job? %d not in CRASH job list\n", JobID);
       continue;
     }
@@ -72,4 +89,5 @@
     CheckControllerJob (job);
   }
+  FreeIOBuffer (&buffer);
   return (TRUE);
 }
