Add locking mutex for thread safe issues
authorHwankyu Jhun <h.jhun@samsung.com>
Wed, 3 Jan 2024 08:25:28 +0000 (17:25 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Wed, 3 Jan 2024 09:08:09 +0000 (18:08 +0900)
This patch addes locking mutex for thread safety.

Change-Id: I18bdf83dd061c598ad1d24b7783b2464030a76cb
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/app-control/app_control_broker.cc

index 7638eceab5ff14925f87266c0f827c116c54bb31..7f61cc255ea47c65d65009e8327b44a838d3dc41 100644 (file)
@@ -103,6 +103,7 @@ void AppControlBroker::FlushPendingItem(int id) {
   g_idle_add([](gpointer data) -> gboolean {
         int req_id = GPOINTER_TO_INT(data);
         auto* broker = AppControlBroker::GetInst();
+        std::lock_guard<std::recursive_mutex> lock(broker->GetRecMutex());
         auto item = broker->FindPendingItem(req_id);
         if (item == nullptr)
           return G_SOURCE_REMOVE;
@@ -131,6 +132,7 @@ void AppControlBroker::FlushPendingItem(int id) {
 void AppControlBroker::AppControlResultBroker(int req_id, int result,
     void* user_data) {
   auto* broker = AppControlBroker::GetInst();
+  std::lock_guard<std::recursive_mutex> lock(broker->GetRecMutex());
   auto request_context = broker->FindRequestContext(req_id);
   if (request_context == nullptr) {
     _E("Invalid request");
@@ -161,6 +163,7 @@ void AppControlBroker::AppControlResultBroker(int req_id, int result,
 void AppControlBroker::AppControlResultCb(int req_id, int result,
     void* user_data) {
   auto* broker = AppControlBroker::GetInst();
+  std::lock_guard<std::recursive_mutex> lock(broker->GetRecMutex());
   auto item = broker->FindPendingItem(req_id);
   if (item != nullptr) {
     item->SetResultInfo(std::make_shared<ResultInfo>(result, user_data));
@@ -174,6 +177,7 @@ void AppControlBroker::AppControlResultCb(int req_id, int result,
 void AppControlBroker::AppControlReplyBroker(bundle* b, int req_id,
     aul_svc_result_val result, void* user_data) {
   auto* broker = AppControlBroker::GetInst();
+  std::lock_guard<std::recursive_mutex> lock(broker->GetRecMutex());
   auto request_context = broker->FindRequestContext(req_id);
   if (request_context == nullptr)
     return;
@@ -196,6 +200,7 @@ void AppControlBroker::AppControlReplyBroker(bundle* b, int req_id,
 void AppControlBroker::AppControlReplyCb(bundle* b, int req_id,
     aul_svc_result_val result, void* user_data) {
   auto* broker = AppControlBroker::GetInst();
+  std::lock_guard<std::recursive_mutex> lock(broker->GetRecMutex());
   auto item = broker->FindPendingItem(req_id);
   if (item != nullptr) {
     item->SetReplyInfo(std::make_shared<ReplyInfo>(
@@ -237,6 +242,7 @@ void AppControlBroker::HandleAppStartedResult(AppControl* app_control,
       [](int launched_pid, void* data) {
         int req_id = GPOINTER_TO_INT(data);
         auto* broker = AppControlBroker::GetInst();
+        std::lock_guard<std::recursive_mutex> lock(broker->GetRecMutex());
         auto request_context = broker->FindRequestContext(req_id);
         if (request_context == nullptr)
           return;
@@ -312,6 +318,7 @@ void AppControlBroker::CopyCalleeInfo(AppControl* dst, AppControl* src) {
 
 void AppControlBroker::SendLaunchRequest(AppControl* app_control,
     std::shared_ptr<RequestContext> context) {
+  std::lock_guard<std::recursive_mutex> lock(GetRecMutex());
   int ret = CheckAppControl(app_control);
   if (ret != APP_CONTROL_ERROR_NONE)
     THROW(ret);
@@ -360,6 +367,7 @@ void AppControlBroker::SendLaunchRequest(AppControl* app_control,
 
 void AppControlBroker::SendLaunchRequest(AppControl* app_control,
     AppControl** reply, app_control_result_e* result) {
+  std::lock_guard<std::recursive_mutex> lock(GetRecMutex());
   int ret = CheckAppControl(app_control);
   if (ret != APP_CONTROL_ERROR_NONE)
     THROW(ret);
@@ -387,6 +395,7 @@ void AppControlBroker::SendLaunchRequest(AppControl* app_control,
 
 void AppControlBroker::SendResumeRequest(AppControl* app_control,
     std::shared_ptr<RequestContext> context) {
+  std::lock_guard<std::recursive_mutex> lock(GetRecMutex());
   try {
     std::string app_id = app_control->GetAppId();
   } catch (Exception& e) {