Index: /trunk/Ohana/src/libkapa/src/KapaOpen.c
===================================================================
--- /trunk/Ohana/src/libkapa/src/KapaOpen.c	(revision 37041)
+++ /trunk/Ohana/src/libkapa/src/KapaOpen.c	(revision 37042)
@@ -1,3 +1,6 @@
 # include "kapa_internal.h"
+
+// kapa connection timeout is N_RETRY * 10000 usec
+# define N_RETRY 2000
 
 # define MY_PORT 2500
@@ -9,5 +12,4 @@
 static int *VALID = NULL;
 
-char *_parse_nextword (char *string);
 int KapaLaunchCommand (char *line);
 
@@ -283,7 +285,8 @@
   }
 
-# define NTRY 1000
+  INITTIME;
+
   Ntry = 0;
-  while (Ntry < NTRY) {
+  while (Ntry < N_RETRY) {
     sock = KapaClientSocket ("localhost");
     if (sock != -1) break;
@@ -308,5 +311,23 @@
   }
 
-  if (sock < 0) return (-1);
+  if (sock < 0) {
+    MARKTIME ("failed to connect to kapa after %f seconds\n", dtime);
+    int killStatus = kill (pid, SIGKILL);
+    if (killStatus) {
+      perror ("failed to kill process");
+    }
+    int waitStatus = waitpid (pid, NULL, 0);
+    if (waitStatus == pid) {
+      fprintf (stderr, "harvested process %d\n", pid);
+    } else if (waitStatus < 0) {
+      fprintf (stderr, "failed to harvest process %d\n", pid);
+    } else if (waitStatus == 0) {
+      fprintf (stderr, "process not exited: %d\n", pid);
+    } else {
+      fprintf (stderr, "odd exit status: %d vs pid %d\n", waitStatus, pid);
+    }
+    return (-1);
+  }
+
   return (sock);
 }
@@ -350,7 +371,8 @@
   fcntl (InitSocket, F_SETFL, O_NONBLOCK);
 
-# define NTRY 1000
+  INITTIME;
+
   Ntry = 0;
-  while (Ntry < NTRY) {
+  while (Ntry < N_RETRY) {
     fd = accept (InitSocket, (struct sockaddr *)&Address, &AddressLength);
     if (fd != -1) break;
@@ -372,5 +394,10 @@
   }
 
-  if (fd < 0) return (-1);
+  if (fd < 0) {
+    MARKTIME ("failed to connect to kapa after %f seconds\n", dtime);
+    kill (pid, SIGKILL);
+    waitpid (pid, NULL, WNOHANG);
+    return (-1);
+  }
 
   // the client uses a BLOCKing socket by default
@@ -414,5 +441,5 @@
   done = FALSE;
   while (!done) {
-    q = _parse_nextword (p);
+    q = parse_nextword (p);
     if (q && *q) {
       argv[i] = strncreate (p, q - p);
