} focus_cb_data;
#define UPDATE_FOCUS_TAKEN_INFO(x_postfix, x_node, x_pid, x_hid) do { \
- debug_msg("updating node[%p], taken_"#x_postfix"[%d] : pid = [%d], handle_id = [%d]", x_node, i, x_pid, x_hid); \
+ debug_msg("updating node[%d/%d], taken_"#x_postfix"[%d] : pid = [%d], handle_id = [%d]", x_node->pid, x_node->handle_id, i, x_pid, x_hid); \
x_node->taken_##x_postfix[i].pid = x_pid; \
x_node->taken_##x_postfix[i].handle_id = x_hid; \
} while (0)
}
for (i = 0; i < NUM_OF_STREAM_IO_TYPE; i++) {
- if (flag_for_taken_index & (i+1)) {
- GList *list = NULL;
- focus_node_t *node = NULL;
-
- if (command == FOCUS_COMMAND_ACQUIRE && (victim_node->taken_by_id[i].pid != assaulter_param->pid || (victim_node->taken_by_id[i].handle_id != assaulter_param->handle_id))) {
- /* skip */
- debug_error("skip updating victim node");
- continue;
- }
- if (reacquisition_changed) {
- if (!victim_node->reacquisition) {
- for (list = g_focus_node_list; list != NULL; list = list->next) {
- CONTINUE_IF_LIST_DATA_IS_NULL(node, list);
- if (node->taken_by_id[i].pid == victim_node->pid) {
- UPDATE_FOCUS_TAKEN_INFO(backup, node, node->taken_by_id[i].pid, node->taken_by_id[i].handle_id);
- UPDATE_FOCUS_TAKEN_INFO(by_id, node, taken_pid, taken_hid);
- } else if (!list->next) {
+ if (reacquisition_changed) {
+ /* Update taken-info including other nodes here.
+ * If the victim node's re-acquisition value is set to false,
+ * propagates its taken-info to its victim node. */
+ debug_msg("[---------- handling reacquisition change in callback ----------->] ");
+ if (!victim_node->reacquisition) {
+ GList *list = NULL;
+ focus_node_t *node = NULL;
+ for (list = g_focus_node_list; list != NULL; list = list->next) {
+ CONTINUE_IF_LIST_DATA_IS_NULL(node, list);
+ if (node->taken_by_id[i].pid == victim_node->pid &&
+ node->taken_by_id[i].handle_id == victim_node->handle_id) {
+ UPDATE_FOCUS_TAKEN_INFO(backup, node, node->taken_by_id[i].pid, node->taken_by_id[i].handle_id);
+ UPDATE_FOCUS_TAKEN_INFO(by_id, node, taken_pid, taken_hid);
+ } else if (!list->next) {
+ if (flag_for_taken_index & (i+1))
UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, taken_pid, taken_hid);
- UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, 0, 0);
- }
+ else
+ UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, victim_node->taken_by_id[i].pid, victim_node->taken_by_id[i].handle_id);
+
+ UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, 0, 0);
}
- } else {
- UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, taken_pid, taken_hid);
- UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, 0, 0);
}
} else {
- if (victim_node->reacquisition)
+ if (flag_for_taken_index & (i+1)) {
UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, taken_pid, taken_hid);
- else
- UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, taken_pid, taken_hid);
+ UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, 0, 0);
+ }
}
+ debug_msg("[<----------------------------------------------------------------] ");
+ } else if (flag_for_taken_index & (i+1)) {
+ if (command == FOCUS_COMMAND_ACQUIRE &&
+ ((victim_node->taken_by_id[i].pid != assaulter_param->pid) ||
+ (victim_node->taken_by_id[i].handle_id != assaulter_param->handle_id)))
+ continue;
+
+ if (victim_node->reacquisition)
+ UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, taken_pid, taken_hid);
+ else
+ UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, taken_pid, taken_hid);
}
}