mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
jack: client_thread_id should return the data thread
Add a function in data-loop to get the natvive thread and use that in client_thread_id() so that it returns the pthread of the data thread instead of the caller thread.
This commit is contained in:
parent
4b9b97841d
commit
e2d6545e77
3 changed files with 24 additions and 1 deletions
|
|
@ -3239,7 +3239,15 @@ int jack_get_client_pid (const char *name)
|
||||||
SPA_EXPORT
|
SPA_EXPORT
|
||||||
jack_native_thread_t jack_client_thread_id (jack_client_t *client)
|
jack_native_thread_t jack_client_thread_id (jack_client_t *client)
|
||||||
{
|
{
|
||||||
return pthread_self();
|
struct client *c = (struct client *) client;
|
||||||
|
void *thr;
|
||||||
|
|
||||||
|
spa_return_val_if_fail(c != NULL, -EINVAL);
|
||||||
|
|
||||||
|
thr = pw_data_loop_get_thread(c->loop);
|
||||||
|
if (thr == NULL)
|
||||||
|
return pthread_self();
|
||||||
|
return *(pthread_t*)thr;
|
||||||
}
|
}
|
||||||
|
|
||||||
SPA_EXPORT
|
SPA_EXPORT
|
||||||
|
|
|
||||||
|
|
@ -253,6 +253,18 @@ bool pw_data_loop_in_thread(struct pw_data_loop * loop)
|
||||||
return pthread_equal(loop->thread, pthread_self());
|
return pthread_equal(loop->thread, pthread_self());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get the thread object.
|
||||||
|
* \param loop the data loop to get the thread of
|
||||||
|
* \return the thread object or NULL when the thread is not running
|
||||||
|
*
|
||||||
|
* On posix based systems this returns a pthread_t *
|
||||||
|
*/
|
||||||
|
SPA_EXPORT
|
||||||
|
void *pw_data_loop_get_thread(struct pw_data_loop * loop)
|
||||||
|
{
|
||||||
|
return loop->running ? &loop->thread : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
SPA_EXPORT
|
SPA_EXPORT
|
||||||
int pw_data_loop_invoke(struct pw_data_loop *loop,
|
int pw_data_loop_invoke(struct pw_data_loop *loop,
|
||||||
spa_invoke_func_t func, uint32_t seq, const void *data, size_t size,
|
spa_invoke_func_t func, uint32_t seq, const void *data, size_t size,
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,9 @@ int pw_data_loop_stop(struct pw_data_loop *loop);
|
||||||
/** Check if the current thread is the processing thread */
|
/** Check if the current thread is the processing thread */
|
||||||
bool pw_data_loop_in_thread(struct pw_data_loop *loop);
|
bool pw_data_loop_in_thread(struct pw_data_loop *loop);
|
||||||
|
|
||||||
|
/** Get the thread object */
|
||||||
|
void *pw_data_loop_get_thread(struct pw_data_loop *loop);
|
||||||
|
|
||||||
/** invoke func in the context of the thread or in the caller thread when
|
/** invoke func in the context of the thread or in the caller thread when
|
||||||
* the loop is not running. Since 0.3.3 */
|
* the loop is not running. Since 0.3.3 */
|
||||||
int pw_data_loop_invoke(struct pw_data_loop *loop,
|
int pw_data_loop_invoke(struct pw_data_loop *loop,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue