Index: /trunk/Ohana/src/opihi/pantasks/CheckJobs.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/CheckJobs.c	(revision 13539)
+++ /trunk/Ohana/src/opihi/pantasks/CheckJobs.c	(revision 13540)
@@ -23,4 +23,7 @@
 
     task = job[0].task;
+    // XXX we need to guarantee that the task exists
+    // if we delete a task, we need to keep a copy until all task jobs are
+    // removed
 
     /* check poll period (ready to ask for status?) */
@@ -140,5 +143,4 @@
 	UpdateTaskTimerStats (task, TIMER_ALLJOBS, job[0].dtime);
 
-	task[0].Npending --;
 	DeleteJob (job);
 	continue;
Index: /trunk/Ohana/src/opihi/pantasks/JobOps.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/JobOps.c	(revision 13539)
+++ /trunk/Ohana/src/opihi/pantasks/JobOps.c	(revision 13540)
@@ -215,4 +215,34 @@
     ActiveJob --;
   }
+
+  job[0].task[0].Npending --;
+  return (TRUE);
+}
+
+int FlushJobs () {
+
+  int i;
+
+  // kill outstanding jobs
+  for (i = 0; i < Njobs; i++) {
+    if (jobs[i][0].mode == JOB_LOCAL) {
+      if (!KillLocalJob (jobs[i])) {
+	jobs[i][0].state = JOB_HUNG;
+	if (VerboseMode()) gprint (GP_LOG, "child process %d is hung, cannot kill\n", jobs[i][0].pid);
+      }
+    } else {
+      if (!KillControllerJob (jobs[i])) {
+	jobs[i][0].state = JOB_HUNG;
+	if (VerboseMode()) gprint (GP_LOG, "child process %d is hung, cannot kill\n", jobs[i][0].pid);
+      }
+    }    
+    jobs[i][0].task[0].Npending = 0;
+    FreeJob (jobs[i]);
+  }
+    
+  Njobs = 0;
+  NJOBS = 20;
+  REALLOCATE (jobs, Job *, NJOBS);
+  ActiveJob = -1;
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/Makefile
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/Makefile	(revision 13539)
+++ /trunk/Ohana/src/opihi/pantasks/Makefile	(revision 13540)
@@ -65,4 +65,5 @@
 $(SRC)/pulse.$(ARCH).o \
 $(SRC)/status.$(ARCH).o \
+$(SRC)/flush.$(ARCH).o \
 $(SRC)/showtask.$(ARCH).o \
 $(SRC)/kill.$(ARCH).o \
