mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-24 07:00:05 -05:00
thread-loop: remove the event
We don't need the event to wake up and stop the thread loop, we can simply use _invoke() of the loop implementation, like we do for the data loop.
This commit is contained in:
parent
820e0fccb1
commit
fecf1bcba4
1 changed files with 10 additions and 17 deletions
|
|
@ -31,21 +31,12 @@ struct pw_thread_loop {
|
||||||
|
|
||||||
struct spa_hook hook;
|
struct spa_hook hook;
|
||||||
|
|
||||||
struct spa_source *event;
|
|
||||||
|
|
||||||
unsigned int created:1;
|
unsigned int created:1;
|
||||||
unsigned int running:1;
|
unsigned int running:1;
|
||||||
unsigned int start_signal:1;
|
unsigned int start_signal:1;
|
||||||
};
|
};
|
||||||
/** \endcond */
|
/** \endcond */
|
||||||
|
|
||||||
static void do_stop(void *data, uint64_t count)
|
|
||||||
{
|
|
||||||
struct pw_thread_loop *this = data;
|
|
||||||
pw_log_debug("stopping");
|
|
||||||
this->running = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define CHECK(expression,label) \
|
#define CHECK(expression,label) \
|
||||||
do { \
|
do { \
|
||||||
if ((errno = (expression)) != 0) { \
|
if ((errno = (expression)) != 0) { \
|
||||||
|
|
@ -86,11 +77,6 @@ static struct pw_thread_loop *loop_new(struct pw_loop *loop,
|
||||||
|
|
||||||
spa_hook_list_init(&this->listener_list);
|
spa_hook_list_init(&this->listener_list);
|
||||||
|
|
||||||
if ((this->event = pw_loop_add_event(this->loop, do_stop, this)) == NULL) {
|
|
||||||
res = -errno;
|
|
||||||
goto clean_this;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
|
|
||||||
clean_this:
|
clean_this:
|
||||||
|
|
@ -154,8 +140,6 @@ void pw_thread_loop_destroy(struct pw_thread_loop *loop)
|
||||||
|
|
||||||
spa_hook_list_clean(&loop->listener_list);
|
spa_hook_list_clean(&loop->listener_list);
|
||||||
|
|
||||||
pw_loop_destroy_source(loop->loop, loop->event);
|
|
||||||
|
|
||||||
if (loop->created)
|
if (loop->created)
|
||||||
pw_loop_destroy(loop->loop);
|
pw_loop_destroy(loop->loop);
|
||||||
|
|
||||||
|
|
@ -237,6 +221,15 @@ error:
|
||||||
return -err;
|
return -err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int do_stop(struct spa_loop *loop, bool async, uint32_t seq,
|
||||||
|
const void *data, size_t size, void *user_data)
|
||||||
|
{
|
||||||
|
struct pw_thread_loop *this = user_data;
|
||||||
|
pw_log_debug("%p: stopping", this);
|
||||||
|
this->running = false;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/** Quit the loop and stop its thread
|
/** Quit the loop and stop its thread
|
||||||
*
|
*
|
||||||
* \param loop a \ref pw_thread_loop
|
* \param loop a \ref pw_thread_loop
|
||||||
|
|
@ -248,7 +241,7 @@ void pw_thread_loop_stop(struct pw_thread_loop *loop)
|
||||||
pw_log_debug("%p stopping %d", loop, loop->running);
|
pw_log_debug("%p stopping %d", loop, loop->running);
|
||||||
if (loop->running) {
|
if (loop->running) {
|
||||||
pw_log_debug("%p signal", loop);
|
pw_log_debug("%p signal", loop);
|
||||||
pw_loop_signal_event(loop->loop, loop->event);
|
pw_loop_invoke(loop->loop, do_stop, 1, NULL, 0, false, loop);
|
||||||
pw_log_debug("%p join", loop);
|
pw_log_debug("%p join", loop);
|
||||||
pthread_join(loop->thread, NULL);
|
pthread_join(loop->thread, NULL);
|
||||||
pw_log_debug("%p joined", loop);
|
pw_log_debug("%p joined", loop);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue