Unsubscribe wifi event on idle 89/150189/1
authorSomin Kim <somin926.kim@samsung.com>
Thu, 14 Sep 2017 14:18:53 +0000 (23:18 +0900)
committerSomin Kim <somin926.kim@samsung.com>
Thu, 14 Sep 2017 14:19:45 +0000 (23:19 +0900)
Change-Id: I03fc4885468cebebfe6459c5637436564dfc8b7c
Signed-off-by: Somin Kim <somin926.kim@samsung.com>
src/server/publisher/WifiState.cpp

index fb2dd4a5b7dfaebf9be7c30825f62ee9d0ca57b3..b4343e96461bc0c5ed3cf3dc43d7f6b1846b692e 100644 (file)
@@ -55,6 +55,9 @@ namespace {
                static void __deviceStateCb(wifi_manager_device_state_e state, void *cbData);
                static void __connectionStateCb(wifi_manager_connection_state_e state, wifi_manager_ap_h ap, void *cbData);
 
+               void __unsubscribe();
+               static gboolean __unsubscribe(gpointer data);
+
                wifi_manager_h __wifiManager;
                int __state;
                bool __activated;
@@ -120,10 +123,7 @@ void WifiState::subscribe()
 
 void WifiState::unsubscribe()
 {
-       wifi_manager_unset_device_state_changed_cb(__wifiManager);
-       wifi_manager_unset_connection_state_changed_cb(__wifiManager);
-
-       __release();
+       g_idle_add(__unsubscribe, this);
 }
 
 bool WifiState::__init()
@@ -210,3 +210,19 @@ void WifiState::__connectionStateCb(wifi_manager_connection_state_e state, wifi_
        if (pubs->__update(pubs->__activated, state == WIFI_MANAGER_CONNECTION_STATE_CONNECTED))
                pubs->notifyObservers();
 }
+
+gboolean WifiState::__unsubscribe(gpointer data)
+{
+       static_cast<WifiState*>(data)->__unsubscribe();
+       return G_SOURCE_REMOVE;
+}
+
+void WifiState::__unsubscribe()
+{
+       IF_FAIL_VOID(__wifiManager);
+
+       wifi_manager_unset_device_state_changed_cb(__wifiManager);
+       wifi_manager_unset_connection_state_changed_cb(__wifiManager);
+
+       __release();
+}