From be421035dee02c44ec89b0777b2ae847891b65d0 Mon Sep 17 00:00:00 2001 From: letz Date: Wed, 10 Nov 2004 11:04:13 +0000 Subject: [PATCH] Fix server thread quit problem on MacOSX. git-svn-id: svn+ssh://jackaudio.org/trunk/jack@788 0c269be4-1314-0410-8aa9-9f06e86f4224 --- jackd/engine.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/jackd/engine.c b/jackd/engine.c index e551135..600e4a9 100644 --- a/jackd/engine.c +++ b/jackd/engine.c @@ -1896,7 +1896,6 @@ jack_server_thread (void *arg) engine->pfd[1].events = POLLIN|POLLERR; engine->pfd_max = 2; - while (!done) { DEBUG ("start while"); @@ -1919,6 +1918,9 @@ jack_server_thread (void *arg) } DEBUG("server thread back from poll"); + + /* Stephane Letz: letz@grame.fr : has to be added otherwise pthread_cancel does not work on MacOSX */ + pthread_testcancel(); /* check each client socket before handling other request*/ for (i = 2; i < max; i++) { @@ -1947,7 +1949,7 @@ jack_server_thread (void *arg) */ handle_client_socket_error(engine, pfd[i].fd); #endif /* JACK_USE_MACH_THREADS */ - } + } } } @@ -2034,10 +2036,10 @@ jack_engine_new (int realtime, int rtpriority, engine->set_sample_rate = jack_set_sample_rate; engine->set_buffer_size = jack_driver_buffer_size; - engine->run_cycle = jack_run_cycle; + engine->run_cycle = jack_run_cycle; engine->delay = jack_engine_notify_clients_about_delay; engine->driver_exit = jack_engine_driver_exit; - engine->transport_cycle_start = jack_transport_cycle_start; + engine->transport_cycle_start = jack_transport_cycle_start; engine->client_timeout_msecs = client_timeout; engine->next_client_id = 1; @@ -2574,8 +2576,15 @@ jack_engine_delete (jack_engine_t *engine) /* stop the other engine threads */ VERBOSE (engine, "stopping server thread\n"); + +#if JACK_USE_MACH_THREADS + // MacOSX pthread_cancel still not implemented correctly in Darwin + mach_port_t machThread = pthread_mach_thread_np (engine->server_thread); + thread_terminate (machThread); +#else pthread_cancel (engine->server_thread); pthread_join (engine->server_thread, NULL); +#endif #ifndef JACK_USE_MACH_THREADS /* Cancel the watchdog thread and wait for it to terminate.