examples: surround loop_iterate() with enter() and leave()

See #4476
This commit is contained in:
Wim Taymans 2025-01-20 12:00:02 +01:00
parent b97dd00f26
commit 7da9c2b25d
3 changed files with 25 additions and 12 deletions

View file

@ -40,6 +40,7 @@ static void do_quit(void *userdata, int signal_number)
int main(int argc, char *argv[])
{
struct data data = { 0, };
struct pw_loop *loop;
struct pw_properties *props;
const char *dev = "hw:0";
@ -47,13 +48,15 @@ int main(int argc, char *argv[])
data.loop = pw_main_loop_new(NULL);
loop = pw_main_loop_get_loop(data.loop);
if (argc > 1)
dev = argv[1];
pw_loop_add_signal(pw_main_loop_get_loop(data.loop), SIGINT, do_quit, &data);
pw_loop_add_signal(pw_main_loop_get_loop(data.loop), SIGTERM, do_quit, &data);
pw_loop_add_signal(loop, SIGINT, do_quit, &data);
pw_loop_add_signal(loop, SIGTERM, do_quit, &data);
data.context = pw_context_new(pw_main_loop_get_loop(data.loop), NULL, 0);
data.context = pw_context_new(loop, NULL, 0);
pw_context_load_module(data.context, "libpipewire-module-spa-node-factory", NULL, NULL);
pw_context_load_module(data.context, "libpipewire-module-link-factory", NULL, NULL);
@ -91,13 +94,15 @@ int main(int argc, char *argv[])
PW_VERSION_NODE,
&props->dict, 0);
pw_loop_enter(loop);
while (true) {
if (pw_proxy_get_bound_id(data.source) != SPA_ID_INVALID &&
pw_proxy_get_bound_id(data.sink) != SPA_ID_INVALID)
break;
pw_loop_iterate(pw_main_loop_get_loop(data.loop), -1);
pw_loop_iterate(loop, -1);
}
pw_loop_leave(loop);
pw_properties_clear(props);
pw_properties_setf(props,

View file

@ -33,7 +33,8 @@ struct data {
SDL_Window *window;
SDL_Texture *texture;
struct pw_main_loop *loop;
struct pw_main_loop *main_loop;
struct pw_loop *loop;
struct pw_context *context;
struct pw_core *core;
@ -61,7 +62,7 @@ static void handle_events(struct data *data)
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
pw_main_loop_quit(data->loop);
pw_main_loop_quit(data->main_loop);
break;
}
}
@ -309,7 +310,7 @@ static int impl_node_process(void *object)
struct data *d = object;
int res;
if ((res = pw_loop_invoke(pw_main_loop_get_loop(d->loop), do_render,
if ((res = pw_loop_invoke(d->loop, do_render,
SPA_ID_INVALID, NULL, 0, true, d)) < 0)
return res;
@ -372,14 +373,16 @@ static int make_nodes(struct data *data)
&props->dict, 0);
pw_loop_enter(data->loop);
while (true) {
if (pw_proxy_get_bound_id(data->out) != SPA_ID_INVALID &&
pw_proxy_get_bound_id(data->in) != SPA_ID_INVALID)
break;
pw_loop_iterate(pw_main_loop_get_loop(data->loop), -1);
pw_loop_iterate(data->loop, -1);
}
pw_loop_leave(data->loop);
pw_properties_clear(props);
@ -405,9 +408,10 @@ int main(int argc, char *argv[])
pw_init(&argc, &argv);
data.loop = pw_main_loop_new(NULL);
data.main_loop = pw_main_loop_new(NULL);
data.loop = pw_main_loop_get_loop(data.main_loop);
data.context = pw_context_new(
pw_main_loop_get_loop(data.loop),
data.loop,
pw_properties_new(
PW_KEY_CORE_DAEMON, "false",
NULL), 0);
@ -436,13 +440,13 @@ int main(int argc, char *argv[])
make_nodes(&data);
pw_main_loop_run(data.loop);
pw_main_loop_run(data.main_loop);
pw_proxy_destroy(data.link);
pw_proxy_destroy(data.in);
pw_proxy_destroy(data.out);
pw_context_destroy(data.context);
pw_main_loop_destroy(data.loop);
pw_main_loop_destroy(data.main_loop);
pw_deinit();
return 0;

View file

@ -182,7 +182,9 @@ PWTEST(daemon_test)
core = pw_context_connect(ctx, NULL, 0);
pwtest_ptr_notnull(core);
pw_loop_enter(loop);
pw_loop_iterate(loop, -1);
pw_loop_leave(loop);
pw_core_disconnect(core);
pw_context_destroy(ctx);
pw_loop_destroy(loop);
@ -205,7 +207,9 @@ PWTEST(daemon_test_without_daemon)
pwtest_ptr_notnull(core); /* Expect this to fail because we don't have a daemon */
pw_loop_enter(loop);
pw_loop_iterate(loop, -1);
pw_loop_leave(loop);
pw_core_disconnect(core);
pw_context_destroy(ctx);
pw_loop_destroy(loop);