mm_resource_manager_res_p resource = (mm_resource_manager_res_p) resource_h;
mm_resource_manager_res_p tmp_resource;
mm_resource_manager_res_volume add_volume;
- int i;
+ int idx;
int ret = MM_RESOURCE_MANAGER_ERROR_NONE;
__mm_resource_handles_lock();
__mm_resources_lock(handle);
__mm_resource_handles_unlock();
- i = __get_resource_index(handle, resource);
- MM_RM_UNLOCK_RETVM_IF(i == MM_RESOURCE_MANAGER_RES_NOT_FOUND, handle->resources_lock,
+ idx = __get_resource_index(handle, resource);
+ MM_RM_UNLOCK_RETVM_IF(idx == MM_RESOURCE_MANAGER_RES_NOT_FOUND, handle->resources_lock,
MM_RESOURCE_MANAGER_ERROR_INVALID_PARAMETER, "Invalid resource handle");
if (new_volume == resource->volume) {
__mm_resources_unlock(handle);
resource->state = MM_RESOURCE_MANAGER_RES_STATE_FOR_ACQUIRE;
resource->volume = new_volume;
- handle->resources->pdata[i] = tmp_resource;
+ handle->resources->pdata[idx] = tmp_resource;
break;
}
int _mm_resource_manager_mark_all_for_release(mm_resource_manager_h rm)
{
mm_resource_manager_s *handle = MM_RESOURCE_MANAGER(rm);
- int i;
+ int idx;
+ int len;
__mm_resource_handles_lock();
MM_RESOURCE_MANAGER_CHECK(handle);
__mm_resources_lock(handle);
__mm_resource_handles_unlock();
- for (i = 0; i < handle->resources->len; i++) {
- if (!__mark_resource_for_release(handle->resources, i, (mm_resource_manager_res_p) handle->resources->pdata[i]))
- i--;
+ len = handle->resources->len;
+
+ for (idx = 0; idx < len; idx++) {
+ if (!__mark_resource_for_release(handle->resources, idx, (mm_resource_manager_res_p) handle->resources->pdata[idx]))
+ MM_RM_INFO("[idx %d] resource length %d", idx, len);
}
MM_RM_INFO("All resources are marked for release in RM #%"PRIu64, _mm_rm_hash64(handle->id));
{
mm_resource_manager_s *handle = MM_RESOURCE_MANAGER(rm);
mm_resource_manager_res_p resource = (mm_resource_manager_res_p) resource_h;
- int i;
+ int idx;
__mm_resource_handles_lock();
MM_RESOURCE_MANAGER_CHECK(handle);
__mm_resources_lock(handle);
__mm_resource_handles_unlock();
- i = __get_resource_index(handle, resource);
- MM_RM_UNLOCK_RETVM_IF(i == MM_RESOURCE_MANAGER_RES_NOT_FOUND, handle->resources_lock,
+ idx = __get_resource_index(handle, resource);
+ MM_RM_UNLOCK_RETVM_IF(idx == MM_RESOURCE_MANAGER_RES_NOT_FOUND, handle->resources_lock,
MM_RESOURCE_MANAGER_ERROR_INVALID_PARAMETER, "Invalid RM #%"PRIu64"", _mm_rm_hash64(handle->id));
info->type = resource->type;
mm_resource_manager_id handle_id;
gboolean release_all = FALSE;
int idx;
+ int len;
MM_RM_INFO("Release callback is emitted for %s of volume %d in RM #%"PRIu64, _mm_resource_manager_get_res_str(type), volume, id);
MM_RM_HASH64(handle_id);
if (handle_id == id) {
__mm_resources_lock(handle);
+ len = handle->resources->len;
__mm_resource_handles_unlock();
- for (idx = 0; idx < handle->resources->len; idx++) {
+ for (idx = 0; idx < len; idx++) {
resource = (mm_resource_manager_res_s*)handle->resources->pdata[idx];
if (resource->type == type && resource->volume == volume) {
/* FIXME : Set true in advance release callback invoking to prevent deadlock with resource marking */
__send_release_cb_sync(handle->id);
g_ptr_array_remove_index_fast(handle->resources, idx);
+
+ MM_RM_INFO("resource length %d => %d", len, handle->resources->len);
+
break;
}
}
+
__mm_resources_unlock(handle);
if (release_all) {
_mm_resource_manager_commit(handle) == MM_RESOURCE_MANAGER_ERROR_NONE)
MM_RM_DEBUG("All resources are released after release cb");
else
- MM_RM_ERROR("Resources cannot be released after release cb");
+ MM_RM_WARNING("Resources cannot be released after release cb");
}
} else {
__mm_resource_handles_unlock();