simdata->computation_amount);
SIMIX_action_set_priority(simdata->compute, simdata->priority);
- self->simdata->waiting_task = task;
+ /* changed to waiting action since we are always waiting one action (execute, communicate or sleep) */
+ self->simdata->waiting_action = simdata->compute;
SIMIX_register_action_to_condition(simdata->compute, simdata->cond);
do {
SIMIX_cond_wait(simdata->cond, simdata->mutex);
state = SIMIX_action_get_state(simdata->compute);
} while (state == SURF_ACTION_READY || state == SURF_ACTION_RUNNING);
SIMIX_unregister_action_to_condition(simdata->compute, simdata->cond);
- self->simdata->waiting_task = NULL;
+ self->simdata->waiting_action = NULL;
SIMIX_mutex_unlock(simdata->mutex);
simdata->refcount--;
simdata->host_list, simdata->comp_amount,
simdata->comm_amount, 1.0, -1.0);
- self->simdata->waiting_task = task;
+ self->simdata->waiting_action = simdata->compute;
SIMIX_register_action_to_condition(simdata->compute, simdata->cond);
do {
SIMIX_cond_wait(simdata->cond, simdata->mutex);
} while (state == SURF_ACTION_READY || state == SURF_ACTION_RUNNING);
SIMIX_unregister_action_to_condition(simdata->compute, simdata->cond);
- self->simdata->waiting_task = NULL;
+ self->simdata->waiting_action = NULL;
SIMIX_mutex_unlock(simdata->mutex);
/* create conditional and register action to it */
cond = SIMIX_cond_init();
+ proc->simdata->waiting_action = act_sleep;
SIMIX_register_action_to_condition(act_sleep, cond);
do {
SIMIX_cond_wait(cond, mutex);
state = SIMIX_action_get_state(act_sleep);
} while (state == SURF_ACTION_READY || state == SURF_ACTION_RUNNING);
+ proc->simdata->waiting_action = NULL;
SIMIX_unregister_action_to_condition(act_sleep, cond);
SIMIX_mutex_unlock(mutex);
/* Simulator Data */
simdata->PID = msg_global->PID++;
- simdata->waiting_task = NULL;
+ simdata->waiting_action = NULL;
simdata->m_host = host;
simdata->argc = argc;
simdata->argv = argv;
DEBUG3("Killing %s(%d) on %s",
process->name, p_simdata->PID, p_simdata->m_host->name);
- if (p_simdata->waiting_task) {
- DEBUG1("Canceling waiting task %s", p_simdata->waiting_task->name);
- if (p_simdata->waiting_task->simdata->compute) {
- SIMIX_action_cancel(p_simdata->waiting_task->simdata->compute);
- } else if (p_simdata->waiting_task->simdata->comm) {
- SIMIX_action_cancel(p_simdata->waiting_task->simdata->comm);
- }
+ if (p_simdata->waiting_action) {
+ DEBUG1("Canceling waiting task %s",
+ SIMIX_action_get_name(p_simdata->waiting_action));
+ SIMIX_action_cancel(p_simdata->waiting_action);
}
xbt_fifo_remove(msg_global->process_list, process);
}
if (timeout > 0)
- SIMIX_cond_wait_timeout(cond, h_simdata->mutex, timeout - start_time + SIMIX_get_clock());
+ SIMIX_cond_wait_timeout(cond, h_simdata->mutex,
+ timeout - start_time + SIMIX_get_clock());
else
SIMIX_cond_wait(cond, h_simdata->mutex);
}
SIMIX_register_action_to_condition(t_simdata->comm, t_simdata->cond);
// breaking point if asynchrounous
- process->simdata->waiting_task = t;
+ process->simdata->waiting_action = t_simdata->comm;
while (1) {
SIMIX_cond_wait(t_simdata->cond, t_simdata->mutex);
}
SIMIX_unregister_action_to_condition(t_simdata->comm, t_simdata->cond);
- process->simdata->waiting_task = NULL;
+ process->simdata->waiting_action = NULL;
/* for this process, don't need to change in get function */
SIMIX_mutex_unlock(t_simdata->mutex);
SIMIX_mutex_lock(t_simdata->mutex);
- process->simdata->waiting_task = task; // for debugging and status displaying purpose
+ process->simdata->waiting_action = t_simdata->comm; // for debugging and status displaying purpose
if (timeout > 0) {
xbt_ex_t e;
/* verify if the timeout happened and the communication didn't started yet */
if (t_simdata->comm == NULL) {
DEBUG1("Action terminated %s (there was a timeout)", task->name);
- process->simdata->waiting_task = NULL;
+ process->simdata->waiting_action = NULL;
/* remove the task from the mailbox */
MSG_mailbox_remove(mailbox, task);
}
DEBUG1("Action terminated %s", task->name);
- process->simdata->waiting_task = NULL;
+ process->simdata->waiting_action = NULL;
/* if (t_simdata->receiver && t_simdata->receiver->simdata) { /\* receiver still around *\/ */
/* t_simdata->receiver->simdata->waiting_task = NULL; */
/* } */
int PPID; /* The parent PID */
m_host_t put_host; /* used for debugging purposes */
m_channel_t put_channel; /* used for debugging purposes */
- m_task_t waiting_task;
+ smx_action_t waiting_action;
int argc; /* arguments number if any */
char **argv; /* arguments table if any */
MSG_error_t last_errno; /* the last value returned by a MSG_function */
surf_action_state_set(action, SURF_ACTION_FAILED);
xbt_heap_remove(action_heap,
((surf_action_cpu_Cas01_im_t) action)->index_heap);
+ xbt_swag_remove(action,
+ ((cpu_Cas01_im_t) ACTION_GET_CPU(action))->action_set);
return;
}