X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dff9e15c44ab6340d27215957c56fa72fad246a2..c6e308f66a2689e0ac94c51c00e81e44be81923a:/src/msg/gos.c diff --git a/src/msg/gos.c b/src/msg/gos.c index cee89a4dd4..321bfef6fa 100644 --- a/src/msg/gos.c +++ b/src/msg/gos.c @@ -44,9 +44,9 @@ MSG_error_t MSG_task_execute(m_task_t task) CHECK_HOST(); simdata = task->simdata; - xbt_assert0((!simdata->compute) + xbt_assert1((!simdata->compute) && (task->simdata->refcount == 1), - "This task is executed somewhere else. Go fix your code!"); + "This task is executed somewhere else. Go fix your code! %d", task->simdata->refcount); DEBUG1("Computing on %s", MSG_process_self()->simdata->m_host->name); @@ -57,14 +57,15 @@ MSG_error_t MSG_task_execute(m_task_t task) 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--; @@ -174,7 +175,7 @@ MSG_error_t MSG_parallel_task_execute(m_task_t task) 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); @@ -182,7 +183,7 @@ MSG_error_t MSG_parallel_task_execute(m_task_t task) } 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); @@ -238,11 +239,13 @@ MSG_error_t MSG_process_sleep(double nb_sec) /* 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); @@ -251,7 +254,7 @@ MSG_error_t MSG_process_sleep(double nb_sec) SIMIX_mutex_destroy(mutex); if (SIMIX_action_get_state(act_sleep) == SURF_ACTION_DONE) { - if (SIMIX_host_get_state(SIMIX_host_self()) == SURF_CPU_OFF) { + if (SIMIX_host_get_state(SIMIX_host_self()) == SURF_RESOURCE_OFF) { SIMIX_action_destroy(act_sleep); MSG_RETURN(MSG_HOST_FAILURE); } @@ -264,18 +267,6 @@ MSG_error_t MSG_process_sleep(double nb_sec) MSG_RETURN(MSG_OK); } -/** \ingroup msg_gos_functions - * \brief Return the number of MSG tasks currently running on - * the host of the current running process. - */ -static int MSG_get_msgload(void) -{ - xbt_die("not implemented yet"); - return 0; -} - - - /** \ingroup msg_gos_functions * \brief Listen on \a channel and waits for receiving a task from \a host. *