From: Jörn Nettingsmeier Date: Thu, 14 Feb 2019 15:37:54 +0000 (+0000) Subject: Add lock-free ringbuffer. Preparation to make jack_stream_write_cb realtime safe. X-Git-Tag: 3.3RC0~52^2~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f07c16a6b96c8ed01812f623aa11721015199e7c;p=thirdparty%2Fshairport-sync.git Add lock-free ringbuffer. Preparation to make jack_stream_write_cb realtime safe. --- diff --git a/audio_jack.c b/audio_jack.c index c8a8b9ee..91abbe4b 100644 --- a/audio_jack.c +++ b/audio_jack.c @@ -31,6 +31,7 @@ #include #include +#include enum ift_type { IFT_frame_left_sample = 0, @@ -81,6 +82,8 @@ jack_client_t *client; jack_nframes_t sample_rate; jack_nframes_t jack_latency; +static jack_ringbuffer_t *jackbuf; + jack_latency_range_t latest_left_latency_range, latest_right_latency_range; int64_t time_of_latest_transfer; @@ -282,6 +285,9 @@ void jack_deinit() { if (open_client_if_necessary_thread) { pthread_cancel(*open_client_if_necessary_thread); free((char *)open_client_if_necessary_thread); + + jack_ringbuffer_free(jackbuf); + } } @@ -354,6 +360,9 @@ int jack_init(__attribute__((unused)) int argc, __attribute__((unused)) char **a if (config.jack_right_channel_name == NULL) config.jack_right_channel_name = strdup("right"); + jackbuf = jack_ringbuffer_create(buffer_size); // make the jack ringbuffer the same size as audio_lmb + jack_ringbuffer_mlock(jackbuf); // lock buffer into memory so that it never gets paged out + jack_set_error_function(default_jack_error_callback); jack_set_info_function(default_jack_info_callback);