mm_resource_manager_app_class_e app_class;
mm_resource_manager_res_type_e type;
int volume;
- gboolean be_released;
/* if an element is NULL, there is no such a resource for the current platform. */
mm_resource_manager_dmn_res_p resources[MM_RESOURCE_MANAGER_RES_TYPE_MAX];
for (i = 0; i < managers->len; i++) {
i_mgr = (mm_resource_manager_dmn_p)managers->pdata[i];
- if (manager->id == i_mgr->id ||
- conf->priority[i_mgr->app_class] >conf->priority[manager->app_class]) {
+ 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;
+ i_mgr->type = type;
+ i_mgr->volume = volume;
+ MM_RM_INFO("Reset the value of release in RM %"PRIu64" (mgr %p)", _mm_rm_hash64(i_mgr->id), i_mgr);
if (conf->max_instance[type] > 0)
res_count[type]++;
continue;
j_mgr = (mm_resource_manager_dmn_p)managers->pdata[j];
res = j_mgr->resources[type]->parts;
- if (res && !j_mgr->be_released) {
+ if (res && j_mgr->resources[type]->is_acquired) {
MM_RM_INFO("[#%d] [#%d / #%d] would be released %s in RM %"PRIu64,
managers->len, j + 1, res->len, res_name, _mm_rm_hash64(j_mgr->id));
- j_mgr->be_released = TRUE;
__add_cb_request(cb_requests, j_mgr, type,
g_array_index(res, mm_resource_manager_res_volume, 0));
j_mgr = (mm_resource_manager_dmn_p)managers->pdata[j];
res = j_mgr->resources[type]->parts;
- if (j_mgr->be_released)
+ if (!j_mgr->resources[type]->is_acquired)
continue;
acquired_volume += g_array_index(res, mm_resource_manager_res_volume, 0);
managers->len, j + 1, res->len, acquired_volume, res_name,
_mm_rm_hash64(j_mgr->id));
- j_mgr->be_released = TRUE;
__add_cb_request(cb_requests, j_mgr, type,
g_array_index(res, mm_resource_manager_res_volume, 0));
request = &g_array_index(requests, mm_resource_manager_dmn_release_cb_request_s, i);
mgr = request->manager;
type = request->type;
+ volume = request->volume;
if (!mgr->resources[type]->is_acquired)
continue;
id = mgr->id;
MM_RM_HASH64(id);
- if (mgr->be_released) {
+ if (mgr->type == type && mgr->volume == volume && !mgr->resources[type]->is_acquired) {
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",
mgr, id, _mm_resource_manager_get_res_str(type), volume);
}
mgr->resources[type]->is_acquired = FALSE;
- mgr->be_released = TRUE;
}
}