diff --git a/src/tools/pw-dot.c b/src/tools/pw-dot.c index 60bb836ed..ceafb4f48 100644 --- a/src/tools/pw-dot.c +++ b/src/tools/pw-dot.c @@ -609,6 +609,8 @@ static void removed_proxy(void *user_data) static void destroy_proxy(void *user_data) { struct global *g = user_data; + spa_hook_remove(&g->object_listener); + spa_hook_remove(&g->proxy_listener); pw_properties_free(g->props); if (g->info) g->info_destroy(g->info); @@ -891,7 +893,9 @@ int main(int argc, char *argv[]) draw_graph(&data, dot_path); dot_str_clear(&data.dot_str); + spa_hook_remove(&data.registry_listener); pw_proxy_destroy((struct pw_proxy*)data.registry); + spa_hook_remove(&data.core_listener); pw_context_destroy(data.context); pw_main_loop_destroy(data.loop); pw_deinit(); diff --git a/src/tools/pw-dump.c b/src/tools/pw-dump.c index 2281ba59d..3b283cab5 100644 --- a/src/tools/pw-dump.c +++ b/src/tools/pw-dump.c @@ -1583,7 +1583,9 @@ int main(int argc, char *argv[]) if (data.info) pw_core_info_free(data.info); + spa_hook_remove(&data.registry_listener); pw_proxy_destroy((struct pw_proxy*)data.registry); + spa_hook_remove(&data.core_listener); pw_context_destroy(data.context); pw_main_loop_destroy(data.loop); pw_deinit(); diff --git a/src/tools/pw-link.c b/src/tools/pw-link.c index 5002d2163..7ac55a251 100644 --- a/src/tools/pw-link.c +++ b/src/tools/pw-link.c @@ -765,7 +765,9 @@ int main(int argc, char *argv[]) regfree(data.out_regex); if (data.in_regex) regfree(data.in_regex); + spa_hook_remove(&data.registry_listener); pw_proxy_destroy((struct pw_proxy*)data.registry); + spa_hook_remove(&data.core_listener); pw_core_disconnect(data.core); pw_context_destroy(data.context); pw_main_loop_destroy(data.loop); diff --git a/src/tools/pw-metadata.c b/src/tools/pw-metadata.c index c89da3949..983bc0b0f 100644 --- a/src/tools/pw-metadata.c +++ b/src/tools/pw-metadata.c @@ -283,7 +283,9 @@ int main(int argc, char *argv[]) if (data.metadata) pw_proxy_destroy((struct pw_proxy*)data.metadata); + spa_hook_remove(&data.registry_listener); pw_proxy_destroy((struct pw_proxy*)data.registry); + spa_hook_remove(&data.core_listener); pw_core_disconnect(data.core); pw_context_destroy(data.context); pw_main_loop_destroy(data.loop); diff --git a/src/tools/pw-mon.c b/src/tools/pw-mon.c index 604c97013..7bd4f93b3 100644 --- a/src/tools/pw-mon.c +++ b/src/tools/pw-mon.c @@ -587,6 +587,9 @@ destroy_proxy (void *data) spa_list_remove(&pd->global_link); + spa_hook_remove(&pd->object_listener); + spa_hook_remove(&pd->proxy_listener); + clear_params(pd); remove_pending(pd); free(pd->type); @@ -859,7 +862,9 @@ int main(int argc, char *argv[]) pw_main_loop_run(data.loop); + spa_hook_remove(&data.registry_listener); pw_proxy_destroy((struct pw_proxy*)data.registry); + spa_hook_remove(&data.core_listener); pw_context_destroy(data.context); pw_main_loop_destroy(data.loop); pw_deinit(); diff --git a/src/tools/pw-profiler.c b/src/tools/pw-profiler.c index 1aa8b2b66..5055204b4 100644 --- a/src/tools/pw-profiler.c +++ b/src/tools/pw-profiler.c @@ -643,8 +643,13 @@ int main(int argc, char *argv[]) pw_main_loop_run(data.loop); - pw_proxy_destroy((struct pw_proxy*)data.profiler); + if (data.profiler) { + spa_hook_remove(&data.profiler_listener); + pw_proxy_destroy((struct pw_proxy*)data.profiler); + } + spa_hook_remove(&data.registry_listener); pw_proxy_destroy((struct pw_proxy*)data.registry); + spa_hook_remove(&data.core_listener); pw_context_destroy(data.context); pw_main_loop_destroy(data.loop); diff --git a/src/tools/pw-top.c b/src/tools/pw-top.c index 0e889b283..174642fc3 100644 --- a/src/tools/pw-top.c +++ b/src/tools/pw-top.c @@ -584,8 +584,13 @@ int main(int argc, char *argv[]) spa_list_consume(n, &data.node_list, link) remove_node(&data, n); - pw_proxy_destroy((struct pw_proxy*)data.profiler); + if (data.profiler) { + spa_hook_remove(&data.profiler_listener); + pw_proxy_destroy((struct pw_proxy*)data.profiler); + } + spa_hook_remove(&data.registry_listener); pw_proxy_destroy((struct pw_proxy*)data.registry); + spa_hook_remove(&data.core_listener); pw_context_destroy(data.context); pw_main_loop_destroy(data.loop);