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;
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()
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();
+}