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);
},
};
-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__;
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;
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;
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));
}
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));
}