From 42bdf3ee6dedbee844f06666aaa1a8069bf1dac8 Mon Sep 17 00:00:00 2001 From: Julian Bouzas <julian.bouzas@collabora.com> Date: Tue, 18 Jun 2019 10:10:20 -0400 Subject: [PATCH] modules: unregister the endpoints when their proxy is destroyed --- modules/module-pipewire.c | 14 ++++++++++++++ modules/module-pw-alsa-udev.c | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/modules/module-pipewire.c b/modules/module-pipewire.c index f47d85c2..97c6bc74 100644 --- a/modules/module-pipewire.c +++ b/modules/module-pipewire.c @@ -76,6 +76,16 @@ proxy_info_destroy(gpointer p) g_slice_free (struct proxy_info, p); } +static void +unregister_endpoint (WpProxy* wp_proxy, WpEndpoint *endpoint) +{ + g_return_if_fail(WP_IS_PROXY(wp_proxy)); + g_return_if_fail(WP_IS_ENDPOINT(endpoint)); + + /* Unregister the endpoint */ + wp_endpoint_unregister(endpoint); +} + static void proxy_node_created(GObject *initable, GAsyncResult *res, gpointer d) { @@ -123,6 +133,10 @@ proxy_node_created(GObject *initable, GAsyncResult *res, gpointer d) /* Register the endpoint */ wp_endpoint_register (endpoint); + /* Set destroy handler to unregister endpoint when the proxy is detroyed */ + g_signal_connect (proxy_node, "destroyed", G_CALLBACK(unregister_endpoint), + endpoint); + /* Clean up */ proxy_info_destroy (pi); } diff --git a/modules/module-pw-alsa-udev.c b/modules/module-pw-alsa-udev.c index bf02d106..6b26132b 100644 --- a/modules/module-pw-alsa-udev.c +++ b/modules/module-pw-alsa-udev.c @@ -70,6 +70,16 @@ proxy_info_destroy(gpointer p) g_slice_free (struct proxy_info, p); } +static void +unregister_endpoint (WpProxy* wp_proxy, WpEndpoint *endpoint) +{ + g_return_if_fail(WP_IS_PROXY(wp_proxy)); + g_return_if_fail(WP_IS_ENDPOINT(endpoint)); + + /* Unregister the endpoint */ + wp_endpoint_unregister(endpoint); +} + static void proxy_node_created(GObject *initable, GAsyncResult *res, gpointer data) { @@ -114,6 +124,10 @@ proxy_node_created(GObject *initable, GAsyncResult *res, gpointer data) /* Register the endpoint */ wp_endpoint_register (endpoint); + /* Set destroy handler to unregister endpoint when the proxy is detroyed */ + g_signal_connect (proxy_node, "destroyed", G_CALLBACK(unregister_endpoint), + endpoint); + /* Clean up */ proxy_info_destroy (pi); } -- GitLab