X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9e68ca10e951fb61e944c99c7774b1e415ae9f6d..e92284beb25991e23cf18c5db06e33d647d77fd7:/src/simdag/sd_global.c diff --git a/src/simdag/sd_global.c b/src/simdag/sd_global.c index 915cb50254..98de7a6a5c 100644 --- a/src/simdag/sd_global.c +++ b/src/simdag/sd_global.c @@ -97,6 +97,19 @@ void SD_init(int *argc, char **argv) SD_LINK_LEVEL = xbt_lib_add_level(link_lib,__SD_link_destroy); } +/** \brief set a configuration variable + * + * Do --help on any simgrid binary to see the list of currently existing configuration variables, and see Section @ref options. + * + * Example: + * SD_config("workstation/model","default"); + */ +void SD_config(const char *key, const char *value){ + xbt_assert(sd_global,"ERROR: Please call SD_init() before using SD_config()"); + xbt_cfg_set_as_string(_sg_cfg_set, key, value); +} + + /** * \brief Reinits the application part of the simulation (experimental feature) * @@ -114,20 +127,37 @@ void SD_application_reinit(void) s_SD_task_t task; - XBT_DEBUG("Recreating the swags..."); + SD_task_t done_task, next_done_task; + + XBT_DEBUG("Recreating the swags..."); xbt_swag_free(sd_global->not_scheduled_task_set); xbt_swag_free(sd_global->schedulable_task_set); xbt_swag_free(sd_global->scheduled_task_set); xbt_swag_free(sd_global->runnable_task_set); xbt_swag_free(sd_global->in_fifo_task_set); xbt_swag_free(sd_global->running_task_set); - xbt_swag_free(sd_global->done_task_set); xbt_swag_free(sd_global->failed_task_set); sd_global->not_scheduled_task_set = xbt_swag_new(xbt_swag_offset(task, state_hookup)); sd_global->schedulable_task_set = xbt_swag_new(xbt_swag_offset(task, state_hookup)); + xbt_swag_foreach_safe(done_task, next_done_task, sd_global->done_task_set){ + if (xbt_dynar_is_empty(done_task->tasks_before)){ + __SD_task_set_state(done_task, SD_SCHEDULABLE); + } else{ + __SD_task_set_state(done_task, SD_NOT_SCHEDULED); + done_task->unsatisfied_dependencies = + xbt_dynar_length(done_task->tasks_before); + done_task->is_not_ready = done_task->unsatisfied_dependencies; + } + free(done_task->workstation_list); + done_task->workstation_list = NULL; + done_task->workstation_nb = 0; + } + + xbt_swag_free(sd_global->done_task_set); + sd_global->scheduled_task_set = xbt_swag_new(xbt_swag_offset(task, state_hookup)); sd_global->runnable_task_set = @@ -142,7 +172,9 @@ void SD_application_reinit(void) xbt_swag_new(xbt_swag_offset(task, state_hookup)); sd_global->task_number = 0; + #ifdef HAVE_JEDULE + jedule_sd_dump(); jedule_sd_cleanup(); jedule_sd_init(); #endif @@ -419,35 +451,15 @@ void SD_exit(void) TRACE_end(); #endif - XBT_DEBUG("Exiting Surf..."); - surf_exit(); - xbt_free(sd_global); sd_global = NULL; #ifdef HAVE_JEDULE jedule_sd_dump(); jedule_sd_cleanup(); + jedule_sd_exit(); #endif -} - -/** - * \brief load script file - */ -void SD_load_environment_script(const char *script_file) -{ -#ifdef HAVE_LUA - lua_State *L = lua_open(); - luaL_openlibs(L); - - if (luaL_loadfile(L, script_file) || lua_pcall(L, 0, 0, 0)) { - printf("error: %s\n", lua_tostring(L, -1)); - return; - } -#else - xbt_die - ("Lua is not available!! to call SD_load_environment_script, lua should be available..."); -#endif - return; + XBT_DEBUG("Exiting Surf..."); + surf_exit(); }