mm_resource_manager_app_class_e app_class;
mm_resource_manager_res_type_e type;
int volume;
- gboolean is_acquired;
- gboolean would_be_released;
+ 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];
volume = requests->volume;
if (volume == MM_RESOURCE_MANAGER_RES_VOLUME_FULL) {
- MM_RM_DEBUG("Full volume of %s is requested [man %p]", res_name, manager);
+ MM_RM_DEBUG("Full volume of %s is requested [man %p] %s",
+ res_name, manager, _mm_resource_manager_get_res_str(type));
for (i = 0; i < managers->len; i++) {
i_mgr = (mm_resource_manager_dmn_p)managers->pdata[i];
- if (!i_mgr->resources[type]->is_acquired ||
+ if (manager->id == i_mgr->id ||
conf->priority[i_mgr->app_class] >conf->priority[manager->app_class]) {
i_mgr->resources[type]->is_acquired = TRUE;
if (conf->max_instance[type] > 0)
i_mgr->resources[type]->is_acquired = FALSE;
MM_RM_DEBUG("All parts of %s are released in RM %"PRIu64,
- res_name, _mm_rm_hash64(i_mgr->id));
+ res_name, _mm_rm_hash64(i_mgr->id));
} else {
__add_cb_request(cb_requests, i_mgr, type, MM_RESOURCE_MANAGER_RES_VOLUME_FULL);
mm_resource_manager_backend_release(type);
- i_mgr->resources[type]->is_acquired = FALSE;
-
MM_RM_DEBUG("Full resource %s is released in RM %"PRIu64" available volume %d",
res_name, _mm_rm_hash64(i_mgr->id), conf->max_volume[type]);
}
}
} else {
- MM_RM_INFO("[managers len #%d] [%d type #%d (max inst #%d)] [%d (max vol %d) units of %s] are requested",
- managers->len, type, res_count[type] + 1,
+ MM_RM_INFO("[managers len #%d] [%s #%d (max inst #%d)] [%d (max vol %d) units of %s] are requested",
+ managers->len, _mm_resource_manager_get_res_str(type), res_count[type] + 1,
conf->max_instance[type], volume, conf->max_volume[type], res_name);
for (i = 0; i < managers->len; i++) {
j_mgr = (mm_resource_manager_dmn_p)managers->pdata[j];
res = j_mgr->resources[type]->parts;
- if (res && !j_mgr->would_be_released) {
+ if (res && !j_mgr->be_released) {
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->would_be_released = TRUE;
+ 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->would_be_released)
+ if (j_mgr->be_released)
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->would_be_released = TRUE;
+ j_mgr->be_released = TRUE;
__add_cb_request(cb_requests, j_mgr, type,
g_array_index(res, mm_resource_manager_res_volume, 0));
mm_resource_manager_backend_acquire(type);
}
- manager->is_acquired = TRUE;
return cb_requests;
}
for (i = 0; i < requests->len; i++) {
request = &g_array_index(requests, mm_resource_manager_dmn_release_cb_request_s, i);
mgr = request->manager;
+ type = request->type;
- if (!mgr->is_acquired)
+ if (!mgr->resources[type]->is_acquired)
continue;
id = mgr->id;
MM_RM_HASH64(id);
- type = request->type;
volume = request->volume;
- MM_RM_INFO("Sending release callback to [man %p acquired %d] RM #%"PRIu64" for %s of volume %d",
- mgr, mgr->is_acquired, id, _mm_resource_manager_get_res_str(type), volume);
+ MM_RM_INFO("Sending release callback to [man %p] RM #%"PRIu64" for %s of volume %d",
+ mgr, id, _mm_resource_manager_get_res_str(type), volume);
_mmrm_dmn_dbus_release_callback(id, type, volume);
if (__wait_for_release_cb_sync(id))
MM_RM_INFO("The number of type %d #%d", type, res_count[type]);
}
- mgr->is_acquired = FALSE;
+ mgr->resources[type]->is_acquired = FALSE;
+ mgr->be_released = TRUE;
}
}