Browse Source

audio: make jackaudio use qemu_thread_set_name

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 <qemu_oss@crudebyte.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
master
Daniel P. Berrangé 7 months ago
parent
commit
8f68a33ad4
  1. 28
      audio/jackaudio.c

28
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)
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

Loading…
Cancel
Save