Index: trunk/Ohana/src/opihi/pantasks/ControllerOps.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/ControllerOps.c	(revision 4705)
+++ trunk/Ohana/src/opihi/pantasks/ControllerOps.c	(revision 4706)
@@ -24,8 +24,22 @@
     GetJobOutput ("stdout", job[0].pid, &job[0].stdout, job[0].stdout_size);
     GetJobOutput ("stderr", job[0].pid, &job[0].stderr, job[0].stderr_size);
+    DeleteControllerJob (job);
   }  
   return (TRUE);
 }
 
+int DeleteControllerJob (Job *job) {
+
+  int status;
+  char cmd[128]; 
+  IOBuffer buffer;
+
+  sprintf (cmd, "delete %d", job[0].pid);
+  InitIOBuffer (&buffer, 0x100);
+  status = ControllerCommand (cmd, CONTROLLER_PROMPT, &buffer);
+  FreeIOBuffer (&buffer);
+  return (status);
+}
+  
 /* ask controller about job status */
 int CheckControllerJobStatus (Job *job) {
@@ -39,24 +53,7 @@
   InitIOBuffer (&buffer, 0x100);
   status = ControllerCommand (cmd, CONTROLLER_PROMPT, &buffer);
-
-  /* check on success of controller command */
-  switch (status) {
-    case CONTROLLER_DOWN:
-      if (VerboseMode()) fprintf (stderr, "controller is down\n");
-      FreeIOBuffer (&buffer);
-      return (FALSE);
-
-    case CONTROLLER_HUNG:
-      if (VerboseMode()) fprintf (stderr, "controller is not responding\n");
-      FreeIOBuffer (&buffer);
-      return (FALSE);
-
-    case CONTROLLER_GOOD:
-      if (VerboseMode()) fprintf (stderr, "message received (CheckControllerJobStatus)\n");
-      break;
-
-    default:
-      if (VerboseMode()) fprintf (stderr, "unknown status for controller command: programming error\n");  
-      exit (1);
+  if (!status) {
+    FreeIOBuffer (&buffer);
+    return (FALSE);
   }
 
@@ -137,5 +134,5 @@
 int SubmitControllerJob (Job *job) {
 
-  int i, Nchar;
+  int i, Nchar, status;
   char *cmd, *p, string[64];
   IOBuffer buffer;
@@ -177,5 +174,5 @@
 
   InitIOBuffer (&buffer, 0x100);
-  ControllerCommand (cmd, CONTROLLER_PROMPT, &buffer);
+  status = ControllerCommand (cmd, CONTROLLER_PROMPT, &buffer);
   free (cmd);
 
@@ -317,5 +314,9 @@
   /* send command, is pipe still open? */
   status = write_fmt (stdin_cntl, "%s\n", cmd);
-  if ((status == -1) && (errno == EPIPE)) return (CONTROLLER_DOWN);
+  if ((status == -1) && (errno == EPIPE)) {
+    ControllerStatus = FALSE;
+    if (VerboseMode()) fprintf (stderr, "controller is down\n");
+    return (FALSE);
+  }
   
   /* watch for response - wait up to 1 second */
@@ -329,7 +330,11 @@
   if (status ==  0) {
     ControllerStatus = FALSE;
-    return (CONTROLLER_DOWN);
-  }
-  if (status == -1) return (CONTROLLER_HUNG);
+    if (VerboseMode()) fprintf (stderr, "controller is down\n");
+    return (FALSE);
+  }
+  if (status == -1) {
+    if (VerboseMode()) fprintf (stderr, "controller is not responding\n");
+    return (FALSE);
+  }
 
   /* need to strip off the prompt */
@@ -339,5 +344,6 @@
     bzero (buffer[0].buffer + buffer[0].Nbuffer, buffer[0].Nalloc - buffer[0].Nbuffer);
   }
-  return (CONTROLLER_GOOD);
+  if (VerboseMode()) fprintf (stderr, "message received\n");
+  return (TRUE);
 }
 
@@ -396,8 +402,8 @@
   InitIOBuffer (&buffer, 0x100);
   status = ControllerCommand (cmd, CONTROLLER_PROMPT, &buffer);
+  FreeIOBuffer (&buffer);
+  return (status);
 
   /** need to interpret output message & free things **/
-  FreeIOBuffer (&buffer);
-  return (TRUE);
 }
 
