remote: do connection in the main loop

This commit is contained in:
Wim Taymans 2019-07-31 13:46:07 +02:00
parent 9869734250
commit a16ea3b576
2 changed files with 11 additions and 5 deletions

View file

@ -348,8 +348,11 @@ void pw_remote_add_listener(struct pw_remote *remote,
spa_hook_list_append(&remote->listener_list, listener, events, data); spa_hook_list_append(&remote->listener_list, listener, events, data);
} }
static int do_connect(struct pw_remote *remote) static int
do_connect(struct spa_loop *loop,
bool async, uint32_t seq, const void *data, size_t size, void *user_data)
{ {
struct pw_remote *remote = user_data;
struct remote *impl = SPA_CONTAINER_OF(remote, struct remote, this); struct remote *impl = SPA_CONTAINER_OF(remote, struct remote, this);
struct pw_proxy dummy; struct pw_proxy dummy;
int res; int res;
@ -413,8 +416,8 @@ static void done_connect(void *data, int result)
spa_strerror(result)); spa_strerror(result));
return; return;
} }
pw_loop_invoke(remote->core->main_loop,
do_connect(remote); do_connect, 0, NULL, 0, false, remote);
} }
SPA_EXPORT SPA_EXPORT
@ -444,8 +447,10 @@ int pw_remote_connect_fd(struct pw_remote *remote, int fd)
"connect_fd failed %s", spa_strerror(res)); "connect_fd failed %s", spa_strerror(res));
return res; return res;
} }
pw_loop_invoke(remote->core->main_loop,
do_connect, 0, NULL, 0, false, remote);
return do_connect(remote); return remote->state == PW_REMOTE_STATE_ERROR ? -EIO : 0;
} }
SPA_EXPORT SPA_EXPORT

View file

@ -296,7 +296,8 @@ void pw_thread_loop_unlock(struct pw_thread_loop *loop)
SPA_EXPORT SPA_EXPORT
void pw_thread_loop_signal(struct pw_thread_loop *loop, bool wait_for_accept) void pw_thread_loop_signal(struct pw_thread_loop *loop, bool wait_for_accept)
{ {
pw_log_trace("thread-loop: %p, waiting %d", loop, loop->n_waiting); pw_log_trace("thread-loop: %p, waiting:%d accept:%d",
loop, loop->n_waiting, wait_for_accept);
if (loop->n_waiting > 0) if (loop->n_waiting > 0)
pthread_cond_broadcast(&loop->cond); pthread_cond_broadcast(&loop->cond);