Re: [PULL 12/27] audio: make jackaudio use qemu_thread_set_name
Philippe Mathieu-Daudé <[email protected]> Sat, 7 Mar 2026 12:37:10 +0100
| Newsgroups | org.nongnu.qemu-rust,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
Hi, On 5/3/26 18:47, Daniel P. Berrangé wrote: > This has greater portability than directly call pthread_setname_np, > which is only 1 out of 3 possible functions for pthreads that can > set the name. > > The new API requires a trampoline function, since it can only set > the name of the current thread. > > Reviewed-by: Christian Schoenebeck <[email protected]> > Signed-off-by: Daniel P. Berrangé <[email protected]> > --- > audio/jackaudio.c | 28 +++++++++++++++++++++++----- > 1 file changed, 23 insertions(+), 5 deletions(-) > > diff --git a/audio/jackaudio.c b/audio/jackaudio.c > index f49fd82c45..be6fb378f7 100644 > --- a/audio/jackaudio.c > +++ b/audio/jackaudio.c > @@ -633,18 +633,36 @@ static void qjack_enable_in(HWVoiceIn *hw, bool enable) > ji->c.enabled = enable; > } > > -#if !defined(WIN32) && defined(CONFIG_PTHREAD_SETNAME_NP_W_TID) > +#if !defined(WIN32) I'm getting on macOS: ../../audio/jackaudio.c:654:12: error: unused function 'qjack_thread_creator' [-Werror,-Wunused-function] 654 | static int qjack_thread_creator(jack_native_thread_t *thread, | ^~~~~~~~~~~~~~~~~~~~ No clue why this isn't covered on CI. My local build: Audio backends CoreAudio support : YES PipeWire support : NO JACK support : YES 1.9.22 > +struct QJackThreadData { > + void *(*function)(void *); > + void *arg; > +}; > + > +static void *qjack_thread_trampoline(void *targ) > +{ > + struct QJackThreadData *data = targ; > + void *(*function)(void *) = data->function; > + void *arg = data->arg; > + > + g_free(data); > + qemu_thread_set_name("jack-client"); > + > + return function(arg); > +} > + > static int qjack_thread_creator(jack_native_thread_t *thread, > const pthread_attr_t *attr, void *(*function)(void *), void *arg) > { > - int ret = pthread_create(thread, attr, function, arg); > + struct QJackThreadData *data = g_new0(struct QJackThreadData, 1); > + data->function = function; > + data->arg = arg; > + int ret = pthread_create(thread, attr, qjack_thread_trampoline, data); > if (ret != 0) { > + g_free(data); > return ret; > } > > - /* set the name of the thread */ > - pthread_setname_np(*thread, "jack-client"); > - > return ret; > } > #endif Fixed adding: -- >8 -- diff --git a/audio/jackaudio.c b/audio/jackaudio.c index be6fb378f72..589aecede9a 100644 --- a/audio/jackaudio.c +++ b/audio/jackaudio.c @@ -712,7 +712,7 @@ static const TypeInfo audio_types[] = { static void __attribute__((__constructor__)) audio_jack_init(void) { qemu_mutex_init(&qjack_shutdown_lock); -#if !defined(WIN32) && defined(CONFIG_PTHREAD_SETNAME_NP_W_TID) +#if !defined(WIN32) jack_set_thread_creator(qjack_thread_creator); #endif jack_set_error_function(qjack_error); ---