Index: trunk/Ohana/src/opihi/pantasks/CheckJobs.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/CheckJobs.c	(revision 11898)
+++ trunk/Ohana/src/opihi/pantasks/CheckJobs.c	(revision 12404)
@@ -1,5 +1,5 @@
 # include "pantasks.h"
 
-int CheckJobs () {
+float CheckJobs () {
 
   FILE *f;
@@ -10,7 +10,11 @@
   char varname[64];
   Queue *queue;
+  float time_running, next_timeout;
 
   // int Ncheck;
   // Ncheck = 0;
+
+  // actual maximum delay is controlled in job_threads.c
+  next_timeout = 1.0;
 
   /** test all jobs: ready to test?  finished? **/
@@ -21,5 +25,11 @@
 
     /* check poll period (ready to ask for status?) */
-    if (GetTaskTimer(job[0].last, FALSE) < task[0].poll_period) continue;
+    time_running = GetTaskTimer(job[0].last, FALSE);
+    // fprintf (stderr, "next: %f, poll: %f, run: %f\n", next_timeout, task[0].poll_period, time_running);
+    if (time_running < task[0].poll_period) {
+      next_timeout = MIN (next_timeout, task[0].poll_period - time_running);
+      continue;
+    }
+    next_timeout = 0.0;
 
     /* check current status */
@@ -139,5 +149,9 @@
      */
     if (job[0].mode == JOB_LOCAL) {
-      if (GetTaskTimer(job[0].start, FALSE) < task[0].timeout_period) continue;
+      if (GetTaskTimer(job[0].start, FALSE) < task[0].timeout_period) { 
+	/* reset polling clock */
+	SetTaskTimer (&job[0].last);
+	continue;
+      }
       if (VerboseMode()) gprint (GP_LOG, "timeout on %s\n", task[0].name);
 
@@ -180,11 +194,7 @@
     /* reset polling clock */
     SetTaskTimer (&job[0].last);
-    if (TestElapsedCheck()) {
-      // fprintf (stderr, "check %d jobs\n", Ncheck);
-      return (TRUE);
-    }
   }
   // fprintf (stderr, "check %d jobs\n", Ncheck);
-  return (TRUE);
+  return (next_timeout);
 }
 
