Index: trunk/Ohana/src/opihi/pantasks/CheckController.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/CheckController.c	(revision 4763)
+++ trunk/Ohana/src/opihi/pantasks/CheckController.c	(revision 4767)
@@ -1,14 +1,14 @@
 # include "psched.h"
+
+static struct timeval start;
+void TimerMark ();
+float TimerElapsed (int reset);
 
 int CheckController () {
 
-  float dtime;
-  struct timeval start, stop;
   char *p, *q;
   int i, Njobs, status, JobID;
   Job *job;
   IOBuffer buffer;
-
-  gettimeofday (&start, (void *) NULL);
 
   /* get the list of completed jobs (exit / crash), update the job status */
@@ -17,28 +17,22 @@
   /*** check EXIT jobs ***/
   InitIOBuffer (&buffer, 0x100);
+  // TimerMark ();
+  // status = ControllerCommand ("stop", CONTROLLER_PROMPT, &buffer); 
+  // if (VerboseMode()) fprintf (stderr, "stop controller %f\n", TimerElapsed(TRUE));
+
+  TimerMark ();
+  FlushIOBuffer (&buffer);
   status = ControllerCommand ("jobstack exit", CONTROLLER_PROMPT, &buffer);
-  if (!status) {
-    FreeIOBuffer (&buffer);
-    return (FALSE);
-  }
+  if (VerboseMode()) fprintf (stderr, "check exit stack %f\n", TimerElapsed(TRUE));
+  if (!status) goto escape;
 
+  /** programming error **/
   p = memstr (buffer.buffer, "USAGE: jobstack", buffer.Nbuffer);
-  if (p != NULL) {
-    FreeIOBuffer (&buffer);
-    return (FALSE);
-  }
+  if (p != NULL) goto escape;
 
   /** parse job list **/
   status = sscanf (buffer.buffer, "%*s %d", &Njobs);
-  if (status != 1) {
-    FreeIOBuffer (&buffer);
-    return (FALSE);
-  }
-
-  gettimeofday (&stop, (void *) NULL);
-  dtime = DTIME (stop, start);
-  if (VerboseMode()) fprintf (stderr, "check exit stack %f\n", dtime);
-  /* if (Njobs) fprintf (stderr, "check exit stack %f\n", dtime); */
-  gettimeofday (&start, (void *) NULL);
+  if (status != 1) goto escape;
+  if (VerboseMode()) fprintf (stderr, "parse %d jobs on stack %f\n", Njobs, TimerElapsed(TRUE));
 
   p = buffer.buffer;
@@ -60,35 +54,21 @@
     CheckControllerJob (job);
   }
-  gettimeofday (&stop, (void *) NULL);
-  dtime = DTIME (stop, start);
-  /* if (VerboseMode()) fprintf (stderr, "clear %d exit jobs %f\n", i, dtime); */
-  gettimeofday (&start, (void *) NULL);
+  if (VerboseMode()) fprintf (stderr, "clear %d exit jobs %f\n", i, TimerElapsed(TRUE));
 
-  if (TestElapsedCheck()) return (TRUE);
+  if (TestElapsedCheck()) goto finish;
+  /* this will prevent us from ever checking crashed jobs... */
 
   /*** check CRASH jobs ***/
   FlushIOBuffer (&buffer);
   status = ControllerCommand ("jobstack crash", CONTROLLER_PROMPT, &buffer);
-  if (!status) {
-    FreeIOBuffer (&buffer);
-    return (FALSE);
-  }
+  if (!status) goto escape;
+
   p = memstr (buffer.buffer, "USAGE: jobstack", buffer.Nbuffer);
-  if (p != NULL) {
-    FreeIOBuffer (&buffer);
-    return (FALSE);
-  }
+  if (p != NULL) goto escape;
 
   /** parse job list **/
   status = sscanf (buffer.buffer, "%*s %d", &Njobs);
-  if (status != 1) {
-    FreeIOBuffer (&buffer);
-    return (FALSE);
-  }
-
-  gettimeofday (&stop, (void *) NULL);
-  dtime = DTIME (stop, start);
-  /* if (VerboseMode()) fprintf (stderr, "check crash stack %f\n", dtime); */
-  gettimeofday (&start, (void *) NULL);
+  if (status != 1) goto escape;
+  if (VerboseMode()) fprintf (stderr, "check crash stack %f\n", TimerElapsed(TRUE)); 
 
   p = buffer.buffer;
@@ -110,11 +90,31 @@
     CheckControllerJob (job);
   }
+  if (VerboseMode()) fprintf (stderr, "clear %d crash jobs %f\n", i, TimerElapsed(TRUE)); 
+
+ finish:
+  FlushIOBuffer (&buffer);
+  // status = ControllerCommand ("run", CONTROLLER_PROMPT, &buffer);
   FreeIOBuffer (&buffer);
+  return (TRUE);
+
+ escape:
+  FlushIOBuffer (&buffer);
+  // status = ControllerCommand ("run", CONTROLLER_PROMPT, &buffer); 
+  FreeIOBuffer (&buffer);
+  return (FALSE);
+}
+
+void TimerMark () {
+    gettimeofday (&start, (void *) NULL);
+}
+
+float TimerElapsed (int reset) {
+
+  float dtime;
+  struct timeval stop;
 
   gettimeofday (&stop, (void *) NULL);
   dtime = DTIME (stop, start);
-  /* if (VerboseMode()) fprintf (stderr, "clear %d crash jobs %f\n", i, dtime); */
-  return (TRUE);
+  if (reset) gettimeofday (&start, (void *) NULL);
+  return (dtime);
 }
-
-    
