Server ignores a release mark request that has been added to resource callback that... 04/234104/9
authorYoungHun Kim <yh8004.kim@samsung.com>
Thu, 21 May 2020 22:59:14 +0000 (07:59 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Fri, 22 May 2020 06:13:55 +0000 (15:13 +0900)
Change-Id: I70f49ea421421ebfac822e1dc654da7718ddbce1

packaging/mm-resource-manager.spec
src/daemon/mm_resource_manager_daemon_priv.c

index b79a3f8..0be7672 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mm-resource-manager
 Summary:    A Multimedia Resource Manager API
-Version:    0.2.26
+Version:    0.2.27
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 98a17e3..f1343b7 100644 (file)
@@ -530,7 +530,7 @@ static GArray *__handle_acquire_requests(mm_resource_manager_dmn_p manager,
                volume = requests->volume;
 
                if (volume == MM_RESOURCE_MANAGER_RES_VOLUME_FULL) {
-                       MM_RM_DEBUG("Resource of %s is requested [mgr %p]", res_name, manager);
+                       MM_RM_DEBUG("Resource of %s is requested (mgr %p)", res_name, manager);
 
                        for (i = 0; i < managers->len; i++) {
                                i_mgr = (mm_resource_manager_dmn_p)managers->pdata[i];
@@ -538,6 +538,9 @@ static GArray *__handle_acquire_requests(mm_resource_manager_dmn_p manager,
                                if (manager->id == i_mgr->id ||
                                        conf->priority[i_mgr->app_class] >conf->priority[manager->app_class]) {
                                        i_mgr->resources[type]->is_acquired = TRUE;
+                                       MM_RM_INFO("Reset (prev state : %d) the value of release in RM %"PRIu64" (mgr %p)",
+                                               i_mgr->be_released, _mm_rm_hash64(i_mgr->id), i_mgr);
+                                       i_mgr->be_released = FALSE;
                                        if (conf->max_instance[type] > 0)
                                                res_count[type]++;
                                        continue;
@@ -676,6 +679,12 @@ static void __handle_release_callbacks(GArray *requests)
                id = mgr->id;
                MM_RM_HASH64(id);
 
+               if (mgr->be_released) {
+                       MM_RM_WARNING("Resource (mgr %p) release callback is already completed RM #%"PRIu64" for %s of volume %d",
+                               mgr, id, _mm_resource_manager_get_res_str(type), volume);
+                       continue;
+               }
+
                volume = request->volume;
 
                MM_RM_INFO("Sending release callback to [mgr %p] RM #%"PRIu64" for %s of volume %d",