fix memory leak
authordavid_kim31 <david_kim31@samsung.com>
Tue, 19 Mar 2013 14:31:31 +0000 (23:31 +0900)
committerdavid_kim31 <david_kim31@samsung.com>
Tue, 19 Mar 2013 14:31:31 +0000 (23:31 +0900)
Change-Id: I4544356de1d1413c583de43efccebde2239eec44
Signed-off-by: david_kim31 <david_kim31@samsung.com>
src/app/FApp_AppImpl.cpp

index 0ae69f0..32a13af 100644 (file)
@@ -90,6 +90,18 @@ static const int _DATACONTROL_PACKET_INDEX_COLUMNLIST = 6;
 static const int _DATACONTROL_PACKET_INDEX_INSERTMAP = 6;
 static const int _DATACONTROL_PACKET_INDEX_UPDATEMAP = 6;
 
+struct charDeleter
+{
+       void operator()(char* pValue)
+       {
+               if(pValue != null)
+               {
+                       free(pValue);
+                       pValue = null;
+               }
+       }
+};
+
 _AppImpl::_AppImpl(App* pApp)
        : __pCheckpointEventListener(null)
        , __pSqlDataControlProviderEventListener(null)
@@ -318,35 +330,27 @@ _AppImpl::OnService(service_s* service, void* user_data)
                // ptr to member function
                (pAppImpl->*pAppImpl->__pRequestHandler)(service, req, handler);
 
-               char* pOperation;
+               std::unique_ptr<char[], charDeleter> pOperation(null);
+               char* pBuf = null;
 
-               int errVal = service_get_operation(service, &pOperation);
+               int errVal = service_get_operation(service, &pBuf);
+               pOperation.reset(pBuf);
 
-               if((errVal == SERVICE_ERROR_NONE) && (!strcmp(pOperation, "osp.appsvc.operation.ALARM")))
+               if((errVal == SERVICE_ERROR_NONE) && (!strcmp((const char*)pOperation.get(), "osp.appsvc.operation.ALARM")))
                {
-                       char* pAlarmId = null;
+                       std::unique_ptr<char[], charDeleter> pAlarmId(null);
+                       char* pBuf = null;
 
-                       errVal = service_get_extra_data(service, SERVICE_DATA_ALARM_ID, &pAlarmId);
+                       errVal = service_get_extra_data(service, SERVICE_DATA_ALARM_ID, &pBuf);
+                       pAlarmId.reset(pBuf);
                        SysTryReturnVoidResult(NID_SYS, errVal == SERVICE_ERROR_NONE, E_SYSTEM, "It is failed to get reserved alarm id.");
-                       int alarmId = atoi(pAlarmId);
+                       int alarmId = atoi((const char*)pAlarmId.get());
 
                        _AlarmManager* pAlarmManager = _AlarmManager::GetInstance();
                        pAlarmManager->OnAlarmExpired(alarmId);
 
-                       if(pAlarmId != null)
-                       {
-                               free(pAlarmId);
-                       }
-
-                       free(pOperation);
-
                        return;
                }
-
-               if(pOperation)
-               {
-                       free(pOperation);
-               }
        }
 
        pAppImpl->__pIAppImpl->OnService(service, initialLaunch);