Index: libjack/client.c
===================================================================
--- libjack/client.c	(revision 1070)
+++ libjack/client.c	(working copy)
@@ -1199,6 +1199,7 @@
 	if (client->on_shutdown) {
 		jack_error ("zombified - calling shutdown handler");
 		client->on_shutdown (client->on_shutdown_arg);
+		
 	} else {
 		jack_error ("jack_client_thread zombified - exiting from JACK");
 		jack_client_close (client);
@@ -1470,20 +1471,20 @@
 jack_nframes_t
 jack_thread_wait (jack_client_t* client, int status)
 {
-	jack_client_control_t *control = client->control;
+	client->control->last_status = status;
 
    /* SECTION ONE: HOUSEKEEPING/CLEANUP FROM LAST DATA PROCESSING */
 
 	/* housekeeping/cleanup after data processing */
 
-	if (status == 0 && control->timebase_cb) {
+	if (status == 0 && client->control->timebase_cb) {
 		jack_call_timebase_master (client);
 	}
 	
 	/* end preemption checking */
 	CHECK_PREEMPTION (client->engine, FALSE);
 	
-	control->finished_at = jack_get_microseconds();
+	client->control->finished_at = jack_get_microseconds();
 	
 	/* wake the next client in the chain (could be the server), 
 	   and check if we were killed during the process
@@ -1509,15 +1510,15 @@
 
 	/* Time to do data processing */
 
-	control->state = Running;
+	client->control->state = Running;
 	
 	/* begin preemption checking */
 	CHECK_PREEMPTION (client->engine, TRUE);
 	
-	if (control->sync_cb)
+	if (client->control->sync_cb)
 		jack_call_sync_client (client);
 
-	return control->nframes;
+	return client->control->nframes;
 }
 
 static void *
Index: jack/internal.h
===================================================================
--- jack/internal.h	(revision 1070)
+++ jack/internal.h	(working copy)
@@ -225,6 +225,7 @@
     volatile uint64_t	signalled_at;
     volatile uint64_t	awake_at;
     volatile uint64_t	finished_at;
+    volatile int32_t	last_status;         /* w: client, r: engine and client */
 
     /* JOQ: all these pointers are trouble for 32/64 compatibility,
      * they should move to non-shared memory. 
Index: jackd/engine.c
===================================================================
--- jackd/engine.c	(revision 1070)
+++ jackd/engine.c	(working copy)
@@ -2065,11 +2065,19 @@
 						client->control->name);
 					client->error++;
 				}
+				if(client->control->last_status != 0) {
+					VERBOSE(engine,
+						"client %s has nonzero process callback status (%d)\n",
+						client->control->name, client->control->last_status);
+					client->error++;
+				}
 			}
 			
 			DEBUG ("client %s errors = %d", client->control->name,
 			       client->error);
 		}
+		
+		//jack_remove_clients (engine);
 	}
 
 	jack_engine_post_process (engine);

