Unregister event callback when the initialization has failed.
authorJaemin Ahn <j.m.ahn@samsung.com>
Tue, 30 Apr 2013 00:12:45 +0000 (09:12 +0900)
committerJaemin Ahn <j.m.ahn@samsung.com>
Tue, 30 Apr 2013 00:12:45 +0000 (09:12 +0900)
Change-Id: Id5f87c30aefc73a9afe87a7b8c1f6b789057b1bb
Signed-off-by: Jaemin Ahn <j.m.ahn@samsung.com>
src/FTel_NetworkManagerImpl.cpp

index 8521d1f..f906bfc 100755 (executable)
@@ -85,29 +85,40 @@ _NetworkManagerImpl::Construct(ITelephonyNetworkEventListener* pListener)
 
     if (pListener != null)
     {
+        unique_ptr<_NetworkManagerEvent> pNetworkManagerEvent(new (std::nothrow) _NetworkManagerEvent);
+        SysTryReturnResult(NID_TEL, pNetworkManagerEvent != null, E_OUT_OF_MEMORY, "Memory allocation failed.");
+
+        result r = pNetworkManagerEvent->Construct();
+        SysTryReturnResult(NID_TEL,  r != E_OUT_OF_MEMORY, r, "Propagating.");
+        SysTryReturnResult(NID_TEL,  r == E_SUCCESS, E_SYSTEM, "A system error has occurred. Failed to construct of the _NetworkManagerEvent.");
+
         // Register data service state changed event
            err = connection_set_type_changed_cb(pConnectionHandle.get(),(connection_type_changed_cb)_NetworkManagerImpl::OnDataServiceStateChangedCallback, this);
                SysLog(NID_TEL, "The return value of connection_set_type_changed_cb() is 0x%x", err);
-        SysTryReturnResult(NID_TEL, err == 0, E_SYSTEM, "A system error has occurred. Failed to register the callback function to received the data service state changed event.");
+        SysTryReturnResult(NID_TEL, err == CONNECTION_ERROR_NONE, E_SYSTEM, "A system error has occurred. Failed to register the callback function to received the data service state changed event.");
 
         // Register call service state changed event
                err = network_info_set_service_state_changed_cb((network_info_service_state_changed_cb) _NetworkManagerImpl::OnCallServiceStateChangedCallback, this);
                SysLog(NID_TEL, "The return value of network_info_set_service_state_changed_cb() is 0x%x", err);
-        SysTryReturnResult(NID_TEL, err == NETWORK_INFO_ERROR_NONE, E_SYSTEM,
-                        "A system error has occurred. Failed to register the callback function to received the call service state changed event.");
+               if (err != NETWORK_INFO_ERROR_NONE)
+               {
+                       SysLogException(NID_TEL, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to register the callback function to received the call service state changed event.");
+               connection_unset_type_changed_cb(pConnectionHandle.get());
+
+               return E_SYSTEM;
+               }
 
         // Register roaming state changed event
            err = network_info_set_roaming_state_changed_cb((network_info_roaming_state_changed_cb)_NetworkManagerImpl::OnRoamingStateChangedCallback, this);
                SysLog(NID_TEL, "The return value of network_info_set_roaming_state_changed_cb() is 0x%x", err);
-        SysTryReturnResult(NID_TEL, err == NETWORK_INFO_ERROR_NONE, E_SYSTEM,
-                       "A system error has occurred. Failed to register the callback function to received the roaming state changed event.");
-
-        unique_ptr<_NetworkManagerEvent> pNetworkManagerEvent(new (std::nothrow) _NetworkManagerEvent);
-        SysTryReturnResult(NID_TEL, pNetworkManagerEvent != null, E_OUT_OF_MEMORY, "Memory allocation failed.");
-
-        result r = pNetworkManagerEvent->Construct();
-        SysTryReturnResult(NID_TEL,  r != E_OUT_OF_MEMORY, r, "Propagating.");
-        SysTryReturnResult(NID_TEL,  r == E_SUCCESS, E_SYSTEM, "A system error has occurred. Failed to construct of the _NetworkManagerEvent.");
+               if (err != NETWORK_INFO_ERROR_NONE)
+               {
+                       SysLogException(NID_TEL, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to register the callback function to received the roaming state changed event.");
+               connection_unset_type_changed_cb(pConnectionHandle.get());
+               network_info_unset_service_state_changed_cb();
+
+               return E_SYSTEM;
+               }
 
         pNetworkManagerEvent->AddListener(*pListener, true);