GThread *dispatcher_thread;
} mm_resource_manager_s;
-static const char *res_state_str[MM_RESOURCE_MANAGER_RES_STATE_FOR_RELEASE + 1] = {
+static const char *res_state_str[] = {
"FOR ACQUIRE",
"ACQUIRED",
"FOR RELEASE",
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);
+ int prev_len;
handle_id = handle->id;
MM_RM_HASH64(handle_id);
+
+ MM_RM_INFO("Release callback is invoked for %s of volume %d in handle RM #%"PRIu64" input RM #%"PRIu64,
+ _mm_resource_manager_get_res_str(type), volume, handle_id, id);
+
if (handle_id == id) {
__mm_resources_lock(handle);
- len = handle->resources->len;
__mm_resource_handles_unlock();
+ prev_len = handle->resources->len;
+
+ MM_RM_DEBUG("resource %p length %d", handle->resources, prev_len);
- for (idx = 0; idx < len; idx++) {
+ for (idx = 0; idx < prev_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 */
g_ptr_array_remove_index_fast(handle->resources, idx);
- MM_RM_INFO("resource length %d => %d", len, handle->resources->len);
+ MM_RM_INFO("resource length %d => %d", prev_len, handle->resources->len);
break;
}
MM_RM_WARNING("Resources cannot be released after release cb");
}
} else {
+ MM_RM_WARNING("handle RM #%"PRIu64" input RM #%"PRIu64" is different", handle_id, id);
__mm_resource_handles_unlock();
}
}