From bf79ee56492118b6a2ec7182f6809ca5fb4564c6 Mon Sep 17 00:00:00 2001 From: Cheoleun Moon Date: Tue, 25 Feb 2020 16:30:54 +0900 Subject: [PATCH] Deregister dbus signals when session is stopped --- src/include/wifi-aware-gdbus.h | 1 + src/wifi-aware-gdbus.c | 8 +++++++- src/wifi-aware-private.c | 11 +++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/include/wifi-aware-gdbus.h b/src/include/wifi-aware-gdbus.h index 4f041b5..e556c2d 100644 --- a/src/include/wifi-aware-gdbus.h +++ b/src/include/wifi-aware-gdbus.h @@ -54,6 +54,7 @@ int wifi_aware_gdbus_deinit(); guint wifi_aware_gdbus_register_signal(wifi_aware_signal_e signal, GDBusSignalCallback callback, void *user_data); +void wifi_aware_gdbus_deregister_signal(guint signal_id); int wifi_aware_gdbus_enable(wifi_aware_h wifi_aware, wifi_aware_enable_request_s *req, GAsyncReadyCallback cb); diff --git a/src/wifi-aware-gdbus.c b/src/wifi-aware-gdbus.c index ad0d28c..3adae10 100644 --- a/src/wifi-aware-gdbus.c +++ b/src/wifi-aware-gdbus.c @@ -54,7 +54,7 @@ static struct { }, }; -guint wifi_aware_gdbus_register_signal(wifi_aware_signal_e signal, +guint wifi_aware_gdbus_register_signal(wifi_aware_signal_e signal, GDBusSignalCallback callback, void *user_data) { __WIFI_AWARE_FUNC_ENTER__; @@ -72,6 +72,12 @@ guint wifi_aware_gdbus_register_signal(wifi_aware_signal_e signal, NULL); } +void wifi_aware_gdbus_deregister_signal(guint signal_id) +{ + __WIFI_AWARE_FUNC_ENTER__; + g_dbus_connection_signal_unsubscribe(gdbus_data.connection, signal_id); +} + int wifi_aware_gdbus_init(wifi_aware_h wifi_aware) { GError *error = NULL; diff --git a/src/wifi-aware-private.c b/src/wifi-aware-private.c index dc14b89..b4cc59b 100644 --- a/src/wifi-aware-private.c +++ b/src/wifi-aware-private.c @@ -228,6 +228,15 @@ static wifi_aware_subscribe_s *__session_get_subscribe_config(wifi_aware_session return session->subscribe_config; } +static void __session_deregister_signals(wifi_aware_session_h session_handle) +{ + wifi_aware_session_s *session = (wifi_aware_session_s *)session_handle; + if (session->discovered_signal_id > 0) + wifi_aware_gdbus_deregister_signal(session->discovered_signal_id); + if (session->received_signal_id > 0) + wifi_aware_gdbus_deregister_signal(session->received_signal_id); +} + static void __enable_request_reply(GObject *src, GAsyncResult *res, gpointer user_data) { GDBusConnection *conn = NULL; @@ -798,6 +807,7 @@ static int __wifi_aware_cancel_publish_request(wifi_aware_session_h session) RET_VAL_IF(!__is_published(session), WIFI_AWARE_ERROR_INVALID_OPERATION, "The publish is not done yet"); + __session_deregister_signals(session); return wifi_aware_gdbus_cancel_publish(session, __session_get_client_id(session)); } @@ -809,6 +819,7 @@ static int __wifi_aware_cancel_subscribe_request(wifi_aware_session_h session) RET_VAL_IF(!__is_subscribed(session), WIFI_AWARE_ERROR_INVALID_OPERATION, "The subscribe is not done yet"); + __session_deregister_signals(session); return wifi_aware_gdbus_cancel_subscribe(session, __session_get_client_id(session)); } -- 2.7.4