Deregister dbus signals when session is stopped
authorCheoleun Moon <chleun.moon@samsung.com>
Tue, 25 Feb 2020 07:30:54 +0000 (16:30 +0900)
committerCheoleun Moon <chleun.moon@samsung.com>
Tue, 25 Feb 2020 07:30:54 +0000 (16:30 +0900)
src/include/wifi-aware-gdbus.h
src/wifi-aware-gdbus.c
src/wifi-aware-private.c

index 4f041b5..e556c2d 100644 (file)
@@ -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);
index ad0d28c..3adae10 100644 (file)
@@ -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;
index dc14b89..b4cc59b 100644 (file)
@@ -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));
 }