} mm_resource_manager_cb_s;
typedef struct {
- mm_resource_manager_id id;
+ mm_resource_manager_id handle_id;
mm_resource_manager_res_type_e type;
mm_resource_manager_res_volume volume;
mm_resource_manager_res_state_e state;
mm_resource_manager_s *handle;
mm_resource_manager_res_p resource;
mm_resource_manager_id handle_id;
- mm_resource_manager_id resource_id;
int idx = 0;
__mm_resource_handles_lock();
MM_RM_HASH64(handle_id);
resource = (mm_resource_manager_res_p)resource_h;
- resource_id = resource->id;
- MM_RM_HASH64(resource_id);
-
- MM_RM_RETVM_IF(handle_id != resource_id, MM_RESOURCE_MANAGER_ERROR_INVALID_PARAMETER,
- "handle RM #%"PRIu64" is not resource RM #%"PRIu64, handle_id, resource_id);
MM_RM_INFO("[invoked : %d state : %s] Resource %p is marked for release in resource #%"PRIu64,
- handle->release_cb.is_invoked, res_state_str[resource->state], resource_h, resource_id);
+ handle->release_cb.is_invoked, res_state_str[resource->state], resource_h, handle_id);
+
+ if (handle_id != _mm_rm_hash64(resource->handle_id))
+ MM_RM_WARNING("handle RM #%"PRIu64" is not resource RM #%"PRIu64, handle_id, _mm_rm_hash64(resource->handle_id));
/* FIXME : We should consider resource lock's vulnerability because of using global variable of 'handles_lock' */
if (handle->release_cb.is_invoked) {
MM_RM_DEBUG("Skip resource %p (%s) of RM #%"PRIu64" because release cb will be executed soon",
- resource, _mm_resource_manager_get_res_str(resource->type), resource_id);
+ resource, _mm_resource_manager_get_res_str(resource->type), handle_id);
__mm_resource_handles_unlock();
resource->state = MM_RESOURCE_MANAGER_RES_STATE_FOR_RELEASE;
return MM_RESOURCE_MANAGER_ERROR_INVALID_OPERATION;
}
- MM_RM_INFO("(%s) is marked for release in RM #%"PRIu64, _mm_resource_manager_get_res_str(resource->type), resource_id);
+ MM_RM_INFO("(%s) is marked for release in RM #%"PRIu64, _mm_resource_manager_get_res_str(resource->type), handle_id);
__mm_resources_lock(handle);
__mm_resource_handles_unlock();
__mm_resources_unlock(handle);
- MM_RM_INFO("RM #%"PRIu64" is completed to mark", resource_id);
+ MM_RM_INFO("RM #%"PRIu64" is completed to mark", handle_id);
return MM_RESOURCE_MANAGER_ERROR_NONE;
}
MM_RM_RETVM_IF(handle == NULL, MM_RESOURCE_MANAGER_ERROR_INVALID_PARAMETER, "NULL handle pointer");
MM_RM_RETVM_IF(res == NULL, MM_RESOURCE_MANAGER_ERROR_INVALID_PARAMETER, "NULL pointer");
+
ret = __check_resource(rm, type, volume);
if (ret != MM_RESOURCE_MANAGER_ERROR_NONE)
return ret;
*res = g_new0(mm_resource_manager_res_s, 1);
- (*res)->id = handle->id;
+ (*res)->handle_id = handle->id;
(*res)->type = type;
if (handle->__max_resource_volumes[type] == MM_RESOURCE_MANAGER_RES_VOLUME_FULL &&
volume != MM_RESOURCE_MANAGER_RES_VOLUME_FULL)