These sleep actions are not put in the running_action swag but in
another private one. Thus, they're somehow hiden from the surf kernel
but it does not need to see them anyway. The cpu module takes care of
them as the only thing that might happen to them (from the surf kernel
perspective) would be to fail, which is now done through the
update_resource function.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5484
48e7efb5-ca39-0410-a469-
dd3cf9ba447f
lmm_system_t cpu_maxmin_system = NULL;
xbt_dict_t cpu_set = NULL;
lmm_system_t cpu_maxmin_system = NULL;
xbt_dict_t cpu_set = NULL;
+xbt_swag_t running_action_set_that_does_not_need_being_checked = NULL;
static void cpu_free(void *cpu)
{
static void cpu_free(void *cpu)
{
*/
xbt_swag_foreach_safe(action, next_action, running_actions) {
*/
xbt_swag_foreach_safe(action, next_action, running_actions) {
- if (action->generic_action.max_duration == NO_MAX_DURATION &&
- action->suspended==2 )
- /* Rely on the fact that sleep action with no duration are on
- the end of the queue */
- break;
-
double_update(&(action->generic_action.remains),
lmm_variable_getvalue(action->variable) * delta);
if (action->generic_action.max_duration != NO_MAX_DURATION)
double_update(&(action->generic_action.remains),
lmm_variable_getvalue(action->variable) * delta);
if (action->generic_action.max_duration != NO_MAX_DURATION)
surf_action_t action = lmm_variable_id(var) ;
if(surf_action_get_state(action)==SURF_ACTION_RUNNING ||
surf_action_t action = lmm_variable_id(var) ;
if(surf_action_get_state(action)==SURF_ACTION_RUNNING ||
- surf_action_get_state(action)==SURF_ACTION_READY) {
+ surf_action_get_state(action)==SURF_ACTION_READY ||
+ surf_action_get_state(action)==SURF_ACTION_NOT_IN_THE_SYSTEM) {
action->finish = date;
action_change_state( action, SURF_ACTION_FAILED);
}
action->finish = date;
action_change_state( action, SURF_ACTION_FAILED);
}
else
action->generic_action.state_set =
surf_cpu_model->common_public->states.failed_action_set;
else
action->generic_action.state_set =
surf_cpu_model->common_public->states.failed_action_set;
- /* Insert at the head by default. This convention is used to speed
- up update_resource_state */
- xbt_swag_insert_at_head(action, action->generic_action.state_set);
+
+ xbt_swag_insert(action, action->generic_action.state_set);
action->variable = lmm_variable_new(cpu_maxmin_system, action,
action->generic_action.priority,
action->variable = lmm_variable_new(cpu_maxmin_system, action,
action->generic_action.priority,
static surf_action_t action_sleep(void *cpu, double duration)
{
surf_action_cpu_Cas01_t action = NULL;
static surf_action_t action_sleep(void *cpu, double duration)
{
surf_action_cpu_Cas01_t action = NULL;
- xbt_swag_t action_set = NULL;
if (duration>0)
duration=MAX(duration,MAXMIN_PRECISION);
if (duration>0)
duration=MAX(duration,MAXMIN_PRECISION);
if(duration == NO_MAX_DURATION) {
/* Move to the *end* of the corresponding action set. This convention
is used to speed up update_resource_state */
if(duration == NO_MAX_DURATION) {
/* Move to the *end* of the corresponding action set. This convention
is used to speed up update_resource_state */
- action_set = action->generic_action.state_set;
- xbt_swag_remove(action, action_set);
- xbt_swag_insert(action, action_set);
+ xbt_swag_remove(action, ((surf_action_t)action)->state_set);
+ ((surf_action_t)action)->state_set =running_action_set_that_does_not_need_being_checked;
+ xbt_swag_insert(action, ((surf_action_t)action)->state_set);
}
lmm_update_variable_weight(cpu_maxmin_system, action->variable, 0.0);
}
lmm_update_variable_weight(cpu_maxmin_system, action->variable, 0.0);
surf_cpu_model->common_public->states.done_action_set =
xbt_swag_new(xbt_swag_offset(action, state_hookup));
surf_cpu_model->common_public->states.done_action_set =
xbt_swag_new(xbt_swag_offset(action, state_hookup));
+ running_action_set_that_does_not_need_being_checked =
+ xbt_swag_new(xbt_swag_offset(action, state_hookup));
+
surf_cpu_model->common_public->name_service = name_service;
surf_cpu_model->common_public->get_resource_name = get_resource_name;
surf_cpu_model->common_public->action_get_state =
surf_cpu_model->common_public->name_service = name_service;
surf_cpu_model->common_public->get_resource_name = get_resource_name;
surf_cpu_model->common_public->action_get_state =