GArray *cb_requests = NULL;
GArray *res = NULL;
int i = 0, j = 0;
- gboolean is_released_called_once = FALSE;
mm_resource_manager_res_type_e type = MM_RESOURCE_MANAGER_RES_TYPE_MAX;
mm_resource_manager_res_volume volume = MM_RESOURCE_MANAGER_RES_VOLUME_FULL;
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++) {
- i_mgr = (mm_resource_manager_dmn_p)managers->pdata[i];
- res = i_mgr->resources[type]->parts;
-
- if (!i_mgr->resources[type]->is_acquired || res ||
- conf->priority[i_mgr->app_class] > conf->priority[manager->app_class]) {
-
- if (conf->volume_would_be_checked[type] && conf->max_volume[type] >= 0 && !res) {
- conf->max_volume[type] -= volume;
- MM_RM_INFO("[type %d] - %d = %d", type, volume, conf->max_volume[type]);
- }
-
- if (conf->max_instance[type] > 0 && conf->max_instance[type] == res_count[type]
- && !is_released_called_once) {
- for (j = 0; j < managers->len; j++) {
- j_mgr = (mm_resource_manager_dmn_p)managers->pdata[j];
- res = j_mgr->resources[type]->parts;
+ if (conf->max_instance[type] > 0 && conf->max_instance[type] == res_count[type]) {
+ for (i= 0; i < managers->len; i++) {
+ i_mgr = (mm_resource_manager_dmn_p)managers->pdata[j];
+ res = i_mgr->resources[type]->parts;
- 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));
+ if (res && i_mgr->resources[type]->is_acquired) {
+ MM_RM_INFO("[#%d] [#%d / #%d] would be released %s in RM %"PRIu64,
+ managers->len, i + 1, res->len, res_name, _mm_rm_hash64(i_mgr->id));
- __add_cb_request(cb_requests, j_mgr, type,
- g_array_index(res, mm_resource_manager_res_volume, 0));
+ __add_cb_request(cb_requests, i_mgr, type, g_array_index(res, mm_resource_manager_res_volume, 0));
- mm_resource_manager_backend_release(type);
- is_released_called_once = TRUE;
- break;
- }
- }
+ mm_resource_manager_backend_release(type);
+ break;
}
+ }
+ } else {
+ for (i = 0; i < managers->len; i++) {
+ i_mgr = (mm_resource_manager_dmn_p)managers->pdata[i];
+ res = i_mgr->resources[type]->parts;
+
+ if (manager->id == i_mgr->id || conf->priority[i_mgr->app_class] > conf->priority[manager->app_class]) {
+
+ if (conf->volume_would_be_checked[type]) {
+ if (!i_mgr->resources[type]->is_acquired && conf->max_volume[type] >= 0) {
+ i_mgr->resources[type]->is_acquired = TRUE;
+ i_mgr->type = type;
+ i_mgr->volume = volume;
+ conf->max_volume[type] -= volume;
+ MM_RM_INFO("[type %d] - %d = %d", type, volume, conf->max_volume[type]);
+ }
- if (conf->max_instance[type] > 0 && !res)
- res_count[type]++;
-
- i_mgr->resources[type]->is_acquired = TRUE;
+ if (conf->volume_would_be_checked[type] && conf->max_volume[type] < 0
+ && acquired_volume < volume) {
+ for (j = 0; j < managers->len; j++) {
+ j_mgr = (mm_resource_manager_dmn_p)managers->pdata[j];
+ res = j_mgr->resources[type]->parts;
- if (conf->max_instance[type] < res_count[type])
- break;
+ if (!j_mgr->resources[type]->is_acquired)
+ continue;
- if (conf->volume_would_be_checked[type] && conf->max_volume[type] < 0
- && acquired_volume < volume) {
- for (j = 0; j < managers->len; j++) {
- j_mgr = (mm_resource_manager_dmn_p)managers->pdata[j];
- res = j_mgr->resources[type]->parts;
+ acquired_volume += g_array_index(res, mm_resource_manager_res_volume, 0);
+ MM_RM_INFO("[#%d] [#%d / #%d] There are %d units of %s in RM %"PRIu64,
+ managers->len, j + 1, res->len, acquired_volume, res_name, _mm_rm_hash64(j_mgr->id));
- if (!j_mgr->resources[type]->is_acquired)
- continue;
+ __add_cb_request(cb_requests, j_mgr, type, g_array_index(res, mm_resource_manager_res_volume, 0));
- acquired_volume += g_array_index(res, mm_resource_manager_res_volume, 0);
- MM_RM_INFO("[#%d] [#%d / #%d] There are %d units of %s in RM %"PRIu64,
- managers->len, j + 1, res->len, acquired_volume, res_name,
- _mm_rm_hash64(j_mgr->id));
+ mm_resource_manager_backend_release(type);
- __add_cb_request(cb_requests, j_mgr, type,
- g_array_index(res, mm_resource_manager_res_volume, 0));
+ if (acquired_volume >= volume)
+ break;
+ }
+ }
+ }
- mm_resource_manager_backend_release(type);
+ if (i_mgr->resources[type]->is_acquired)
+ res_count[type]++;
- if (acquired_volume >= volume)
- break;
- }
+ i_mgr->resources[type]->is_acquired = TRUE;
}
-
- continue;
}
- }
- res = manager->resources[requests->type]->parts;
- if (res == NULL) {
- res = g_array_sized_new(FALSE, FALSE, sizeof(mm_resource_manager_res_volume),
- MM_RESOURCE_MANAGER_RESERVED_PART_ARRAY_SIZE);
- manager->resources[requests->type]->parts = res;
+ res = manager->resources[requests->type]->parts;
+ if (!res) {
+ res = g_array_sized_new(FALSE, FALSE, sizeof(mm_resource_manager_res_volume),
+ MM_RESOURCE_MANAGER_RESERVED_PART_ARRAY_SIZE);
+ manager->resources[requests->type]->parts = res;
+ }
+ g_array_append_val(res, requests->volume);
}
- g_array_append_val(res, requests->volume);
}
manager->resources[type]->is_acquired = TRUE;