mirror of
https://github.com/qemu/qemu.git
synced 2026-04-05 21:46:25 +00:00
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>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user