Index: /branches/eam_branches/ipp-20111122/Ohana/src/libdvo/include/dvo.h
===================================================================
--- /branches/eam_branches/ipp-20111122/Ohana/src/libdvo/include/dvo.h	(revision 33374)
+++ /branches/eam_branches/ipp-20111122/Ohana/src/libdvo/include/dvo.h	(revision 33375)
@@ -246,4 +246,5 @@
   int stdio[3]; 	      // fd's for communication with the remote host
   int pid;		      // remote process ID
+  int status;		      // job exit status
 } HostInfo;
 
Index: /branches/eam_branches/ipp-20111122/Ohana/src/libdvo/src/HostTable.c
===================================================================
--- /branches/eam_branches/ipp-20111122/Ohana/src/libdvo/src/HostTable.c	(revision 33374)
+++ /branches/eam_branches/ipp-20111122/Ohana/src/libdvo/src/HostTable.c	(revision 33375)
@@ -170,15 +170,17 @@
       if (WIFEXITED(status)) {
 	fprintf (stderr, "normal completion, exit status is %d\n", WEXITSTATUS(status));
-	if (WEXITSTATUS(status)) {
+	table->hosts[j].status = WEXITSTATUS(status);
+	if (table->hosts[j].status) {
 	  fprintf (stderr, "job failed on %s\n", table->hosts[j].hostname);
-	  exit (1);
+	  continue;
 	}
       } else {
+	table->hosts[j].status = -1;
 	fprintf (stderr, "job exited abnormally on %s\n", table->hosts[j].hostname);
-	exit (1);
+	continue;
       }
     }
     if (!found) {
-      fprintf (stderr, "failed to matched finished job to known host!\n");
+      fprintf (stderr, "Programming error: failed to matched finished job to known host!\n");
       exit (2);
     }
Index: /branches/eam_branches/ipp-20111122/Ohana/src/opihi/dvo/mextract.c
===================================================================
--- /branches/eam_branches/ipp-20111122/Ohana/src/opihi/dvo/mextract.c	(revision 33374)
+++ /branches/eam_branches/ipp-20111122/Ohana/src/opihi/dvo/mextract.c	(revision 33375)
@@ -528,4 +528,6 @@
   Vector **vec = NULL;
   for (i = 0; i < table->Nhosts; i++) {
+    if (table->hosts[i].status) continue; 
+
     char resultFile[MAX_PATH_LENGTH];
     snprintf (resultFile, MAX_PATH_LENGTH, "%s/dvo.results.fits", table->hosts[i].pathname);
Index: /branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/CopyToHostLocation.c
===================================================================
--- /branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/CopyToHostLocation.c	(revision 33374)
+++ /branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/CopyToHostLocation.c	(revision 33375)
@@ -101,6 +101,7 @@
       // need to re-open and re-read tgtname to check md5sum
       // XXX files that fail here need to be checked
-      char *absname = abspath (tgtname, 1024);
-      if (!get_md5_from_pclient (host, absname, tgtDigest)) {
+      // char *absname = abspath (tgtname, 1024);
+      // if (!get_md5_from_pclient (host, absname, tgtDigest)) {
+      if (!get_md5_with_copy (tgtname, NULL, tgtDigest)) {
 	fprintf (stderr, "error reading %s or getting md5\n", tgtname);
 	success = FALSE;
@@ -264,6 +265,12 @@
   char result[1024], fileout[1024];
   int Nscan = sscanf (stdout_buf.buffer, "%s %s", result, fileout);
-  assert (Nscan == 2);
-  assert (strlen(result) == 2*NDIGEST);
+  if (Nscan != 2) {
+    fprintf (stderr, "error reading md5sum: %s\n", stdout_buf.buffer);
+    goto escape;
+  }
+  if (strlen(result) != 2*NDIGEST) {
+    fprintf (stderr, "error reading md5sum: %s\n", stdout_buf.buffer);
+    goto escape;
+  }
   
   // result is the set of 0-f nibbles, convert to the digest
Index: /branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/PclientCommands.c
===================================================================
--- /branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/PclientCommands.c	(revision 33374)
+++ /branches/eam_branches/ipp-20111122/Ohana/src/photdbc/src/PclientCommands.c	(revision 33375)
@@ -59,5 +59,5 @@
       return FALSE;
   }
-  if (status -= -1) {
+  if (status == -1) {
       fprintf (stderr, "client hung\n");
       return FALSE;
@@ -144,5 +144,9 @@
 
   sscanf (p, "%*s %s", string);
-  assert (strcmp(string, "NONE")); // "no current job\n");
+  if (!strcmp(string, "NONE")) {
+    if (DEBUG) fprintf (stderr, "not started?\n");
+    FreeIOBuffer (&buffer);
+    return FALSE;
+  }
   
   /** no status change, return to BUSY stack **/
@@ -160,5 +164,9 @@
   }
 
-  assert (!strcmp(string, "EXIT"));
+  if (strcmp(string, "EXIT")) {
+    fprintf (stderr, "error in status string?\n");
+    FreeIOBuffer (&buffer);
+    return FALSE;
+  }
 
   int exit_status, stdout_buf_size, stderr_buf_size;
