Guarantee a conditional race for the entire release callback 88/295388/7 accepted/tizen/unified/20230716.194416
authorYoungHun Kim <yh8004.kim@samsung.com>
Thu, 6 Jul 2023 08:29:54 +0000 (17:29 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Mon, 10 Jul 2023 11:08:28 +0000 (20:08 +0900)
- to avoid deadlock of destroy() while release is invoking

Change-Id: I0b63d1b1ebf019f4cea14e66c61be35a82a3fa1e

src/lib/mm_resource_manager_priv.c

index 83aa695..e1d3a90 100644 (file)
@@ -401,12 +401,9 @@ int _mm_resource_manager_release_other_resources(mm_resource_manager_s *handle)
 
        MM_RM_INFO("Enter %p", handle);
 
-       __mm_resource_handles_lock();
-       MM_RESOURCE_MANAGER_CHECK(handle);
-       __mm_resources_lock(handle);
+       MM_RM_RETVM_IF(NULL == handle, MM_RESOURCE_MANAGER_ERROR_INVALID_PARAMETER, "NULL handle pointer");
        handle->release_cb.is_invoked = TRUE;
        MM_RM_INFO("other resource is released RM #%"PRIu64, _mm_rm_hash64(handle->id));
-       __mm_resource_handles_unlock();
 
        len = handle->resources->len;
 
@@ -422,8 +419,6 @@ int _mm_resource_manager_release_other_resources(mm_resource_manager_s *handle)
        else
                MM_RM_ERROR("Dbus commit request failed");
 
-       __mm_resources_unlock(handle);
-
        MM_RM_INFO("All resources are marked for release in RM #%"PRIu64, _mm_rm_hash64(handle->id));
 
        return ret;
@@ -655,7 +650,6 @@ static void __mm_resource_manager_release_callback(mm_resource_manager_s *handle
                        break;
                }
        }
-       __mm_resources_unlock(handle);
 
        MM_RM_DEBUG("[%d] RELEASE ALL", release_all);
 
@@ -668,6 +662,8 @@ static void __mm_resource_manager_release_callback(mm_resource_manager_s *handle
                        MM_RM_WARNING("Resources cannot be released after release cb");
                }
        }
+
+       __mm_resources_unlock(handle);
 }
 
 static void __mm_resource_manager_status_callback(mm_resource_manager_s *handle, mm_resource_manager_status_e status)