lmm_system_t cpu_maxmin_system = NULL;
xbt_dict_t cpu_set = NULL;
+static xbt_swag_t running_action_set_that_does_not_need_being_checked = NULL;
static void cpu_free(void *cpu)
{
free(((cpu_Cas01_t) cpu)->name);
+ xbt_dict_free(&(((cpu_Cas01_t)cpu)->properties));
free(cpu);
}
{
surf_parse_reset_parser();
surfxml_add_callback(STag_surfxml_host_cb_list, parse_cpu_init);
- surfxml_add_callback(STag_surfxml_prop_cb_list, parse_properties);
- surfxml_add_callback(STag_surfxml_random_cb_list, &init_randomness);
- surfxml_add_callback(ETag_surfxml_random_cb_list, &add_randomness);
}
static void *name_service(const char *name)
static int action_free(surf_action_t action)
{
- action->using--;
- if (!action->using) {
+ action->refcount --;
+ if (!action->refcount ) {
xbt_swag_remove(action, action->state_set);
if (((surf_action_cpu_Cas01_t) action)->variable)
lmm_variable_free(cpu_maxmin_system,
static void action_use(surf_action_t action)
{
- action->using++;
+ action->refcount ++;
}
static void action_cancel(surf_action_t action)
*/
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)
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);
}
XBT_IN2("(%s,%g)", CPU->name, size);
action = xbt_new0(s_surf_action_cpu_Cas01_t, 1);
- action->generic_action.using = 1;
+ action->generic_action.refcount = 1;
action->generic_action.cost = size;
action->generic_action.remains = size;
action->generic_action.priority = 1.0;
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,
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 == 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);
static void finalize(void)
{
xbt_dict_free(&cpu_set);
+ lmm_system_free(cpu_maxmin_system);
+ cpu_maxmin_system = NULL;
xbt_swag_free(surf_cpu_model->common_public->states.ready_action_set);
xbt_swag_free(surf_cpu_model->common_public->states.
running_action_set);
xbt_swag_free(surf_cpu_model->common_public->states.
failed_action_set);
xbt_swag_free(surf_cpu_model->common_public->states.done_action_set);
+ xbt_swag_free(running_action_set_that_does_not_need_being_checked);
+ running_action_set_that_does_not_need_being_checked = NULL;
free(surf_cpu_model->common_public);
free(surf_cpu_model->common_private);
free(surf_cpu_model->extension_public);
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 =