diff --git a/configure.ac b/configure.ac index 745c8a5..6852ecf 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ dnl changes are made dnl --- JACK_MAJOR_VERSION=0 JACK_MINOR_VERSION=99 -JACK_MICRO_VERSION=19 +JACK_MICRO_VERSION=20 dnl --- dnl HOWTO: updating the jack protocol version diff --git a/jack/Makefile.am b/jack/Makefile.am index 3f8dd37..8349e24 100644 --- a/jack/Makefile.am +++ b/jack/Makefile.am @@ -21,7 +21,7 @@ noinst_HEADERS = \ internal.h \ jslist.h \ memops.h \ -f messagebuffer.h \ + messagebuffer.h \ pool.h \ port.h \ ringbuffer.h \ diff --git a/jack/messagebuffer.h b/jack/messagebuffer.h index 74effc5..0686f92 100644 --- a/jack/messagebuffer.h +++ b/jack/messagebuffer.h @@ -36,7 +36,7 @@ jack_messagebuffer_add(msg); \ } -void jack_messagebuffer_init(const char *prefix); +void jack_messagebuffer_init(); void jack_messagebuffer_exit(); void jack_messagebuffer_add(const char *msg); diff --git a/jackd/engine.c b/jackd/engine.c index b3e4e1b..d4b9821 100644 --- a/jackd/engine.c +++ b/jackd/engine.c @@ -1543,6 +1543,10 @@ jack_engine_new (int realtime, int rtpriority, int do_mlock, int do_unlock, uid_t uid = getuid (); uid_t euid = geteuid (); #endif /* USE_CAPABILITIES */ + + /* start a thread to display messages from realtime threads */ + jack_messagebuffer_init(); + jack_init_time (); engine = (jack_engine_t *) malloc (sizeof (jack_engine_t)); diff --git a/jackd/jackd.c b/jackd/jackd.c index 0c8fcf6..353b867 100644 --- a/jackd/jackd.c +++ b/jackd/jackd.c @@ -174,9 +174,6 @@ jack_main (jack_driver_desc_t * driver_desc, JSList * driver_params) } } - /* start a thread to display messages from realtime threads */ - jack_messagebuffer_init(""); - if (verbose) { fprintf (stderr, "%d waiting for signals\n", getpid()); } diff --git a/libjack/messagebuffer.c b/libjack/messagebuffer.c index 1751122..754c5cd 100644 --- a/libjack/messagebuffer.c +++ b/libjack/messagebuffer.c @@ -26,39 +26,42 @@ #include -#define MB_BUFFERS 32 /* must be 2^n */ +#define MB_BUFFERS 32 /* must be 2^n */ static char mb_buffers[MB_BUFFERS][MB_BUFFERSIZE]; -static const char *mb_prefix; static unsigned int mb_initialized = 0; static unsigned int mb_inbuffer = 0; static unsigned int mb_outbuffer = 0; static pthread_t mb_writer_thread; +static void +mb_flush() +{ + while (mb_outbuffer != mb_inbuffer) { + fputs(mb_buffers[mb_outbuffer], stderr); + mb_outbuffer = (mb_outbuffer + 1) & (MB_BUFFERS - 1); + } +} + static void * mb_thread_func(void *arg) { while (mb_initialized) { usleep(1000); - while (mb_outbuffer != mb_inbuffer) { - fprintf(stderr, "%s%s", mb_prefix, - mb_buffers[mb_outbuffer]); - mb_outbuffer = (mb_outbuffer + 1) & (MB_BUFFERS - 1); - } + mb_flush(); } return NULL; } void -jack_messagebuffer_init (const char *prefix) +jack_messagebuffer_init () { if (mb_initialized) return; mb_initialized = 1; - mb_prefix = prefix; if (pthread_create(&mb_writer_thread, NULL, &mb_thread_func, NULL) != 0) mb_initialized = 0; } @@ -71,7 +74,8 @@ jack_messagebuffer_exit () mb_initialized = 0; - pthread_join(&mb_writer_thread, NULL); + pthread_join(mb_writer_thread, NULL); + mb_flush(); }