From: Jaehyun Cho Date: Fri, 11 Oct 2019 09:09:09 +0000 (+0900) Subject: Fix process event life cycle X-Git-Tag: submit/tizen/20191128.075235~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2e4fa3b68a8b9cfe5bc29e333ae32bdc67f74dcf;p=platform%2Fupstream%2Fiotivity.git Fix process event life cycle process event variable need to initialize before OCInit(), event need to register after OCInit and also event variable should be freed after OCStop() https://github.sec.samsung.net/RS7-IOTIVITY/IoTivity/pull/586 (cherry-picked from 3a00d744cac2e026b2b7b195b8b2984fd06ca049) Change-Id: I88ffc088a19a4a8bf7fc58c49d436d4813921a36 Signed-off-by: Jaehyun Cho Signed-off-by: DoHyun Pyun --- diff --git a/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.cpp b/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.cpp index e9e481a84..239cfc2f1 100755 --- a/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.cpp +++ b/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.cpp @@ -1070,6 +1070,15 @@ int main(int argc, char* argv[]) OCSetRAInfo(&rainfo); #endif +#ifdef WITH_PROCESS_EVENT + processEvent = oc_event_new(); + if (!processEvent) + { + OIC_LOG(INFO, TAG, "oc_event_new failed!"); + exit (EXIT_FAILURE); + } +#endif + OIC_LOG(DEBUG, TAG, "OCServer is starting..."); if (OCInit(NULL, 0, OC_SERVER) != OC_STACK_OK) @@ -1123,14 +1132,8 @@ int main(int argc, char* argv[]) OIC_LOG(INFO, TAG, "Device Registration failed!"); exit (EXIT_FAILURE); } -#ifdef WITH_PROCESS_EVENT - processEvent = oc_event_new(); - if (!processEvent) - { - OIC_LOG(INFO, TAG, "oc_event_new failed!"); - exit (EXIT_FAILURE); - } +#ifdef WITH_PROCESS_EVENT OCRegisterProcessEvent(processEvent); #endif @@ -1197,6 +1200,11 @@ int main(int argc, char* argv[]) OIC_LOG(INFO, TAG, "Exiting ocserver main loop..."); + if (OCStop() != OC_STACK_OK) + { + OIC_LOG(ERROR, TAG, "OCStack process error"); + } + #ifdef WITH_PROCESS_EVENT if (processEvent) { @@ -1205,10 +1213,5 @@ int main(int argc, char* argv[]) } #endif - if (OCStop() != OC_STACK_OK) - { - OIC_LOG(ERROR, TAG, "OCStack process error"); - } - return 0; } diff --git a/resource/src/InProcClientWrapper.cpp b/resource/src/InProcClientWrapper.cpp index 433d84008..1062ea39a 100755 --- a/resource/src/InProcClientWrapper.cpp +++ b/resource/src/InProcClientWrapper.cpp @@ -64,6 +64,17 @@ namespace OC if (m_cfg.mode == ModeType::Client) { +#ifdef WITH_PROCESS_EVENT + if (false == m_threadRun) + { + m_processEvent = oc_event_new(); + if (!m_processEvent) + { + OIC_LOG(INFO, TAG, "oc_event_new failed!"); + return OC_STACK_ERROR; + } + } +#endif OCTransportFlags serverFlags = static_cast(m_cfg.serverConnectivity & CT_MASK_FLAGS); OCTransportFlags clientFlags = @@ -80,12 +91,6 @@ namespace OC { m_threadRun = true; #ifdef WITH_PROCESS_EVENT - m_processEvent = oc_event_new(); - if (!m_processEvent) - { - OIC_LOG(INFO, TAG, "oc_event_new failed!"); - return OC_STACK_ERROR; - } OCRegisterProcessEvent(m_processEvent); #endif m_listeningThread = std::thread(&InProcClientWrapper::listeningFunc, this); @@ -113,6 +118,12 @@ namespace OC #endif m_listeningThread.join(); } + OCStackResult result = OCStop(); + + if (OC_STACK_OK != result) + { + throw InitializeException(OC::InitException::STACK_TERMINATE_ERROR, result); + } #ifdef WITH_PROCESS_EVENT if (m_processEvent) @@ -121,12 +132,6 @@ namespace OC m_processEvent = NULL; } #endif - OCStackResult result = OCStop(); - - if (OC_STACK_OK != result) - { - throw InitializeException(OC::InitException::STACK_TERMINATE_ERROR, result); - } } return OC_STACK_OK; } diff --git a/resource/src/InProcServerWrapper.cpp b/resource/src/InProcServerWrapper.cpp index f36a1f3ef..cd562188f 100755 --- a/resource/src/InProcServerWrapper.cpp +++ b/resource/src/InProcServerWrapper.cpp @@ -288,6 +288,18 @@ namespace OC OC_STACK_INVALID_PARAM); } +#ifdef WITH_PROCESS_EVENT + if (false == m_threadRun) + { + m_processEvent = oc_event_new(); + if (!m_processEvent) + { + OIC_LOG(INFO, TAG, "oc_event_new failed!"); + return OC_STACK_ERROR; + } + } +#endif + OCTransportFlags serverFlags = static_cast(m_cfg.serverConnectivity & CT_MASK_FLAGS); OCTransportFlags clientFlags = @@ -304,12 +316,6 @@ namespace OC { m_threadRun = true; #ifdef WITH_PROCESS_EVENT - m_processEvent = oc_event_new(); - if (!m_processEvent) - { - OIC_LOG(INFO, TAG, "oc_event_new failed!"); - return OC_STACK_ERROR; - } OCRegisterProcessEvent(m_processEvent); #endif m_processThread = std::thread(&InProcServerWrapper::processFunc, this); @@ -333,6 +339,13 @@ namespace OC m_processThread.join(); } + OCStackResult res = OCStop(); + + if (OC_STACK_OK != res) + { + throw InitializeException(OC::InitException::STACK_TERMINATE_ERROR, res); + } + #ifdef WITH_PROCESS_EVENT if (m_processEvent) { @@ -341,13 +354,6 @@ namespace OC } #endif - OCStackResult res = OCStop(); - - if (OC_STACK_OK != res) - { - throw InitializeException(OC::InitException::STACK_TERMINATE_ERROR, res); - } - return OC_STACK_OK; }