mm_resource_manager_app_class_e app_class;
mm_resource_manager_res_type_e type;
int volume;
- gboolean is_released;
+ gboolean is_acquired;
+ gboolean would_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", res_name);
+ MM_RM_DEBUG("Full volume of %s is requested [man %p]", res_name, manager);
for (i = 0; i < managers->len; i++) {
i_man = (mm_resource_manager_dmn_p)managers->pdata[i];
MM_RM_DEBUG("Full resource %s is released in RM %"PRIu64" available volume %d",
res_name, _mm_rm_hash64(i_man->id), conf->max_volume[type]);
- break;
}
}
} else {
j_man = (mm_resource_manager_dmn_p)managers->pdata[j];
res = j_man->resources[type]->parts;
- if (res && !j_man->is_released) {
+ if (res && !j_man->would_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_man->id));
- j_man->is_released = TRUE;
+ j_man->would_be_released = TRUE;
__add_cb_request(cb_requests, j_man, type,
g_array_index(res, mm_resource_manager_res_volume, 0));
j_man = (mm_resource_manager_dmn_p)managers->pdata[j];
res = j_man->resources[type]->parts;
- if (j_man->is_released)
+ if (j_man->would_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_man->id));
- j_man->is_released = TRUE;
+ j_man->would_be_released = TRUE;
__add_cb_request(cb_requests, j_man, type,
g_array_index(res, mm_resource_manager_res_volume, 0));
mm_resource_manager_backend_acquire(type);
}
+ manager->is_acquired = TRUE;
return cb_requests;
}
mm_resource_manager_dmn_release_cb_request_s *request;
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;
+ mm_resource_manager_dmn_p man = NULL;
mm_resource_manager_conf_s *conf = mm_resource_manager_get_conf();
MM_RM_RETM_IF(requests == NULL, "requests is NULL");
for (i = 0; i < requests->len; i++) {
request = &g_array_index(requests, mm_resource_manager_dmn_release_cb_request_s, i);
- id = request->manager->id;
+ man = request->manager;
+
+ if (!man->is_acquired)
+ continue;
+
+ id = man->id;
MM_RM_HASH64(id);
+
type = request->type;
volume = request->volume;
- MM_RM_INFO("Sending release callback to [man %p] RM #%"PRIu64" for %s of volume %d",
- request->manager, id, _mm_resource_manager_get_res_str(type), volume);
+
+ MM_RM_INFO("Sending release callback to [man %p acquired %d] RM #%"PRIu64" for %s of volume %d",
+ man, man->is_acquired, id, _mm_resource_manager_get_res_str(type), volume);
_mmrm_dmn_dbus_release_callback(id, type, volume);
if (__wait_for_release_cb_sync(id))
res_count[type]--;
MM_RM_INFO("The number of type %d #%d", type, res_count[type]);
}
+
+ man->is_acquired = FALSE;
}
}