diff --git a/modules/module-pipewire/simple-endpoint.c b/modules/module-pipewire/simple-endpoint.c index 55c18ce3de090d9ee79ca217bf31259537b171ed..3ca0fac1e12cf8a175b904fa817d075e9e466174 100644 --- a/modules/module-pipewire/simple-endpoint.c +++ b/modules/module-pipewire/simple-endpoint.c @@ -33,6 +33,9 @@ struct _WpPipewireSimpleEndpoint /* The remote pipewire */ WpRemotePipewire *remote_pipewire; + /* Handler */ + gulong proxy_node_done_handler_id; + /* Proxies */ WpProxyNode *proxy_node; struct spa_hook node_proxy_listener; @@ -145,9 +148,11 @@ on_proxy_port_created(GObject *initable, GAsyncResult *res, gpointer data) g_ptr_array_add(self->proxies_port, proxy_port); /* Register the done callback */ - g_signal_connect(self->proxy_node, "done", (GCallback)on_all_ports_done, - self); - wp_proxy_sync (WP_PROXY(self->proxy_node)); + if (!self->proxy_node_done_handler_id) { + self->proxy_node_done_handler_id = g_signal_connect_object(self->proxy_node, + "done", (GCallback)on_all_ports_done, self, 0); + wp_proxy_sync (WP_PROXY(self->proxy_node)); + } } static void @@ -267,8 +272,8 @@ wp_simple_endpoint_init_async (GAsyncInitable *initable, int io_priority, /* Register a port_added callback */ self->remote_pipewire = wp_core_get_global (core, WP_GLOBAL_REMOTE_PIPEWIRE); g_return_if_fail(self->remote_pipewire); - g_signal_connect(self->remote_pipewire, "global-added::port", - (GCallback)on_port_added, self); + g_signal_connect_object(self->remote_pipewire, "global-added::port", + (GCallback)on_port_added, self, 0); /* Create the proxy node async */ node_proxy = wp_remote_pipewire_proxy_bind (self->remote_pipewire, diff --git a/modules/module-pw-audio-softdsp-endpoint.c b/modules/module-pw-audio-softdsp-endpoint.c index e9a93fd2a6747af0ffd4aeef3a28b4668a45500d..dd2d5bc7a6c0f2150b9d5d1c047a5f5c96894e1b 100644 --- a/modules/module-pw-audio-softdsp-endpoint.c +++ b/modules/module-pw-audio-softdsp-endpoint.c @@ -35,6 +35,9 @@ struct _WpPwAudioSoftdspEndpoint /* The remote pipewire */ WpRemotePipewire *remote_pipewire; + /* Handler */ + gulong proxy_dsp_done_handler_id; + /* temporary method to select which endpoint * is going to be the default input/output */ gboolean selected; @@ -438,8 +441,11 @@ on_proxy_dsp_port_created(GObject *initable, GAsyncResult *res, gpointer data) g_ptr_array_add(self->proxies_dsp_port, proxy_dsp_port); /* Register a callback to know when all the dsp ports have been emitted */ - g_signal_connect(self->proxy_dsp, "done", (GCallback)on_proxy_dsp_done, self); - wp_proxy_sync (WP_PROXY(self->proxy_dsp)); + if (!self->proxy_dsp_done_handler_id) { + self->proxy_dsp_done_handler_id = g_signal_connect_object(self->proxy_dsp, + "done", (GCallback)on_proxy_dsp_done, self, 0); + wp_proxy_sync (WP_PROXY(self->proxy_dsp)); + } } static void @@ -641,8 +647,8 @@ wp_endpoint_init_async (GAsyncInitable *initable, int io_priority, /* Register a port_added callback */ self->remote_pipewire = wp_core_get_global (core, WP_GLOBAL_REMOTE_PIPEWIRE); g_return_if_fail(self->remote_pipewire); - g_signal_connect(self->remote_pipewire, "global-added::port", - (GCallback)on_port_added, self); + g_signal_connect_object(self->remote_pipewire, "global-added::port", + (GCallback)on_port_added, self, 0); /* Call the parent interface */ wp_endpoint_parent_interface->init_async (initable, io_priority, cancellable,