static inline void __add_cb_request(GArray *cb_requests, mm_resource_manager_dmn_p mgr,
mm_resource_manager_res_type_e type, mm_resource_manager_res_volume volume);
static void __release_all_resources(mm_resource_manager_dmn_p manager);
-static gboolean __poll(struct pollfd sync, mm_resource_manager_id id);
+static gboolean __poll(struct pollfd sync, mm_resource_manager_id id, short events);
static gboolean __wait_for_release_cb_sync(mm_resource_manager_id id);
mgr, id, _mm_resource_manager_get_res_str(type), volume);
_mmrm_dmn_dbus_release_callback(id, type, volume);
+
if (__wait_for_release_cb_sync(id)) {
MM_RM_INFO("Release callback sync success RM #%"PRIu64, id);
if (conf->volume_would_be_checked[type] && volume != MM_RESOURCE_MANAGER_RES_VOLUME_FULL) {
MM_RM_INFO("RM #%"PRIu64" (type %s mgr %p) set acquired value as false (%d)",
id, _mm_resource_manager_get_res_str(type), mgr, mgr->resources[type]->is_acquired);
} else {
- MM_RM_ERROR("Wait for release callback sync failed RM #%"PRIu64, id);
+ MM_RM_ERROR("Wait for release callback sync failed RM #%"PRIu64" (type %s)", id, _mm_resource_manager_get_res_str(type));
}
}
}
}
}
-static gboolean __poll(struct pollfd sync, mm_resource_manager_id id)
+static gboolean __poll(struct pollfd sync, mm_resource_manager_id id, short events)
{
int errsv = 0;
int try_cnt = 0;
int ret = 0;
while (try_cnt++ < 3) {
- sync.events = POLLIN;
+ sync.events = events;
sync.revents = 0;
ret = poll(&sync, 1, RELEASE_CB_SYNC_TIMEOUT * 1000);
break;
}
+ MM_RM_INFO("[fd %d] RM #%"PRIu64" events %d", sync.fd, id, events);
return TRUE;
}
sync.fd = open(RELEASE_CB_SYNC_PATH, O_RDONLY | O_NONBLOCK);
MM_RM_RETVM_IF(sync.fd == -1, FALSE, "Sync FIFO cannot be opened");
- if (!__poll(sync, id))
+ if (!__poll(sync, id, POLLIN))
goto out;
read_size = read(sync.fd, &recv_id, sizeof(recv_id));
if (id != _mm_rm_hash64(recv_id))
MM_RM_WARNING("Sync is received from wrong client #%"PRIu64, id);
- ret = __poll(sync, id);
+ ret = __poll(sync, id, POLLIN | POLLHUP);
out:
close(sync.fd);