Index: /trunk/Ohana/src/opihi/Makefile.Common
===================================================================
--- /trunk/Ohana/src/opihi/Makefile.Common	(revision 4766)
+++ /trunk/Ohana/src/opihi/Makefile.Common	(revision 4767)
@@ -55,6 +55,6 @@
 
 dist: clean
-	rm -f $(BIN)/*
-	rm -f $(LIB)/*
+	rm -rf $(BIN)/*
+	rm -rf $(LIB)/*
 
 clean-help:
Index: /trunk/Ohana/src/opihi/pantasks/CheckController.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/CheckController.c	(revision 4766)
+++ /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);
 }
-
-    
Index: /trunk/Ohana/src/opihi/pantasks/CheckSystem.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/CheckSystem.c	(revision 4766)
+++ /trunk/Ohana/src/opihi/pantasks/CheckSystem.c	(revision 4767)
@@ -2,12 +2,15 @@
 
 # define MAX_DELAY 0.1
-struct timeval start;
+struct timeval start, last;
 static int Ncheck = 0;
 
 int CheckSystem () {
 
+  float dtime;
+  struct timeval now;
+
   gettimeofday (&start, (void *) NULL);
 
-  if (Ncheck < 20) {
+  if (Ncheck < 100) {
     CheckTasks ();
     CheckJobs ();
@@ -18,4 +21,5 @@
     Ncheck = 0;
   }
+  /* ohana_memcheck (FALSE); */
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/ControllerOps.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/ControllerOps.c	(revision 4766)
+++ /trunk/Ohana/src/opihi/pantasks/ControllerOps.c	(revision 4767)
@@ -359,5 +359,4 @@
   }
   if (status == -1) {
-    StopController ();
     if (VerboseMode()) fprintf (stderr, "controller is not responding\n");
     return (FALSE);
Index: /trunk/Ohana/src/opihi/pcontrol/Makefile
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/Makefile	(revision 4766)
+++ /trunk/Ohana/src/opihi/pcontrol/Makefile	(revision 4767)
@@ -53,4 +53,6 @@
 $(SDIR)/kill.$(ARCH).o \
 $(SDIR)/pulse.$(ARCH).o \
+$(SDIR)/stop.$(ARCH).o \
+$(SDIR)/run.$(ARCH).o \
 $(SDIR)/status.$(ARCH).o \
 $(SDIR)/stdout.$(ARCH).o \
Index: /trunk/Ohana/src/opihi/pcontrol/init.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/init.c	(revision 4766)
+++ /trunk/Ohana/src/opihi/pcontrol/init.c	(revision 4767)
@@ -9,4 +9,6 @@
 int pulse       PROTO((int, char **));
 int status      PROTO((int, char **));
+int run         PROTO((int, char **));
+int stop        PROTO((int, char **));
 int stderr_pc   PROTO((int, char **));
 int stdout_pc   PROTO((int, char **));
@@ -23,4 +25,6 @@
   {"pulse",     pulse,     "set system pulse"},
   {"status",    status,    "get system status"},
+  {"stop",      stop,      "stop controller processing"},
+  {"run",       run,       "start controller processing"},
   {"stderr",    stderr_pc, "get stderr buffer for job"},
   {"stdout",    stdout_pc, "get stdout buffer for job"},
Index: /trunk/Ohana/src/opihi/pcontrol/run.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/run.c	(revision 4767)
+++ /trunk/Ohana/src/opihi/pcontrol/run.c	(revision 4767)
@@ -0,0 +1,13 @@
+# include "pcontrol.h"
+
+int run (int argc, char **argv) {
+
+  if (argc != 1) {
+    fprintf (stderr, "USAGE: run\n");
+    return (FALSE);
+  }
+
+  rl_event_hook = CheckSystem;
+
+  return (TRUE);
+}
Index: /trunk/Ohana/src/opihi/pcontrol/stop.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/stop.c	(revision 4767)
+++ /trunk/Ohana/src/opihi/pcontrol/stop.c	(revision 4767)
@@ -0,0 +1,13 @@
+# include "pcontrol.h"
+
+int stop (int argc, char **argv) {
+
+  if (argc != 1) {
+    fprintf (stderr, "USAGE: stop\n");
+    return (FALSE);
+  }
+
+  rl_event_hook = NULL;
+
+  return (TRUE);
+}
Index: /trunk/Ohana/src/opihi/scripts/psched.pro
===================================================================
--- /trunk/Ohana/src/opihi/scripts/psched.pro	(revision 4766)
+++ /trunk/Ohana/src/opihi/scripts/psched.pro	(revision 4767)
@@ -26,7 +26,8 @@
   # correction: still valid for local tasks
   periods -poll 0.20
-  periods -exec 0.001
+  periods -exec 0.0001
   periods -timeout 10.0
   nmax 1024
+#  nmax 100
   host anyhost
 
