X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/976ee462f4626798ebf76ca46d13f53e10e0e28d..dfb935741dbdd2a843f684538ab2403c082f633b:/src/surf/surf_model_timer.c diff --git a/src/surf/surf_model_timer.c b/src/surf/surf_model_timer.c index df420053d9..4cf18e1572 100644 --- a/src/surf/surf_model_timer.c +++ b/src/surf/surf_model_timer.c @@ -1,6 +1,5 @@ -/* $Id$ */ - -/* Copyright (c) 2005 Arnaud Legrand. All rights reserved. */ +/* Copyright (c) 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -12,11 +11,16 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_timer, surf, "Logging specific to SURF (timer)"); +typedef struct surf_action_timer { + s_surf_action_t generic_action; +} s_surf_action_timer_t, *surf_action_timer_t; + typedef struct command { s_surf_resource_t generic_resource; /* Must remain first, since we add this to a trace */ void *function; void *args; s_xbt_swag_hookup_t command_set_hookup; + surf_action_timer_t action; } s_command_t, *command_t; @@ -34,6 +38,9 @@ static command_t command_new(void *fun, void *args) command->function = fun; command->args = args; xbt_swag_insert(command, command_pending); + command->action = + surf_action_new(sizeof(s_surf_action_timer_t), 0, surf_timer_model, + 0); return command; } @@ -44,6 +51,9 @@ static void command_free(command_t command) } else if (xbt_swag_belongs(command, command_pending)) { xbt_swag_remove(command, command_pending); } + xbt_swag_remove(command->action, + surf_timer_model->states.running_action_set); + xbt_free(command->action); surf_resource_free((surf_resource_t) command); return; } @@ -122,7 +132,7 @@ static int get(void **function, void **arg) if (command) { *function = command->function; *arg = command->args; - xbt_free(command); + command_free(command); return 1; } else { return 0; @@ -145,7 +155,7 @@ static int action_is_suspended(surf_action_t action) return 0; } -static void finalize(void) +static void timer_finalize(void) { xbt_heap_free(timer_heap); timer_heap = NULL; @@ -170,10 +180,10 @@ static void surf_timer_model_init_internal(void) surf_timer_model->model_private->resource_used = resource_used; surf_timer_model->model_private->share_resources = share_resources; surf_timer_model->model_private->update_actions_state = - update_actions_state; + update_actions_state; surf_timer_model->model_private->update_resource_state = - update_resource_state; - surf_timer_model->model_private->finalize = finalize; + update_resource_state; + surf_timer_model->model_private->finalize = timer_finalize; surf_timer_model->suspend = action_suspend; surf_timer_model->resume = action_resume; @@ -184,8 +194,10 @@ static void surf_timer_model_init_internal(void) { s_command_t var; - command_pending = xbt_swag_new(xbt_swag_offset(var, command_set_hookup)); - command_to_run = xbt_swag_new(xbt_swag_offset(var, command_set_hookup)); + command_pending = + xbt_swag_new(xbt_swag_offset(var, command_set_hookup)); + command_to_run = + xbt_swag_new(xbt_swag_offset(var, command_set_hookup)); } empty_trace = tmgr_empty_trace_new();