mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-01 22:58:50 -04:00
pipewire-jack: check before destroying
Check pointers before calling the destructors (where needed), so that a not fully constructed `client` object may be passed to `jack_client_close()`. Furthermore, remove the metadata proxy and object listeners as well.
This commit is contained in:
parent
15d5ab2425
commit
c6a5698eac
1 changed files with 14 additions and 5 deletions
|
|
@ -3471,20 +3471,29 @@ int jack_client_close (jack_client_t *client)
|
|||
|
||||
res = jack_deactivate(client);
|
||||
|
||||
pw_thread_loop_stop(c->context.loop);
|
||||
if (c->context.loop)
|
||||
pw_thread_loop_stop(c->context.loop);
|
||||
|
||||
if (c->registry) {
|
||||
spa_hook_remove(&c->registry_listener);
|
||||
pw_proxy_destroy((struct pw_proxy*)c->registry);
|
||||
}
|
||||
if (c->metadata && c->metadata->proxy) {
|
||||
spa_hook_remove(&c->metadata->listener);
|
||||
spa_hook_remove(&c->metadata->proxy_listener);
|
||||
pw_proxy_destroy((struct pw_proxy*)c->metadata->proxy);
|
||||
}
|
||||
spa_hook_remove(&c->core_listener);
|
||||
pw_core_disconnect(c->core);
|
||||
pw_context_destroy(c->context.context);
|
||||
|
||||
pw_thread_loop_destroy(c->context.loop);
|
||||
if (c->core) {
|
||||
spa_hook_remove(&c->core_listener);
|
||||
pw_core_disconnect(c->core);
|
||||
}
|
||||
|
||||
if (c->context.context)
|
||||
pw_context_destroy(c->context.context);
|
||||
|
||||
if (c->context.loop)
|
||||
pw_thread_loop_destroy(c->context.loop);
|
||||
|
||||
pw_log_debug("%p: free", client);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue