X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/272ccad1b68b6d9c17069f3c934886925bb15b5d..8be7ea3f9e71cd563e91b6aba63f5c70f043fbd5:/src/simix/smx_context.c diff --git a/src/simix/smx_context.c b/src/simix/smx_context.c index 9e1a961f35..791a73e869 100644 --- a/src/simix/smx_context.c +++ b/src/simix/smx_context.c @@ -1,6 +1,6 @@ /* a fast and simple context switching library */ -/* Copyright (c) 2009 - 2011. The SimGrid Team. +/* Copyright (c) 2009-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -11,7 +11,8 @@ #include "xbt/swag.h" #include "xbt/xbt_os_thread.h" #include "smx_private.h" -#include "gras_config.h" +#include "simgrid/sg_config.h" +#include "internal_config.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_context, simix, "Context switching mechanism"); @@ -19,7 +20,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_context, simix, char* smx_context_factory_name = NULL; /* factory name specified by --cfg=contexts/factory:value */ smx_ctx_factory_initializer_t smx_factory_initializer_to_use = NULL; int smx_context_stack_size = 128 * 1024; - +int smx_context_stack_size_was_set = 0; #ifdef HAVE_THREAD_LOCAL_STORAGE static __thread smx_context_t smx_current_context_parallel; #else @@ -35,6 +36,11 @@ static e_xbt_parmap_mode_t smx_parallel_synchronization_mode = XBT_PARMAP_DEFAUL */ void SIMIX_context_mod_init(void) { +#if defined(CONTEXT_THREADS) && !defined(HAVE_THREAD_LOCAL_STORAGE) + /* the __thread storage class is not available on this platform: + * use getspecific/setspecific instead to store the current context in each thread */ + xbt_os_thread_key_create(&smx_current_context_key); +#endif if (!simix_global->context_factory) { /* select the context factory to use to create the contexts */ if (smx_factory_initializer_to_use) { @@ -85,16 +91,10 @@ void SIMIX_context_mod_init(void) } } } - -#if defined(CONTEXT_THREADS) && !defined(HAVE_THREAD_LOCAL_STORAGE) - /* the __thread storage class is not available on this platform: - * use getspecific/setspecific instead to store the current context in each thread */ - xbt_os_thread_key_create(&smx_current_context_key); -#endif } /** - * This function is call by SIMIX_clean() to finalize the context module. + * This function is called by SIMIX_clean() to finalize the context module. */ void SIMIX_context_mod_exit(void) { @@ -105,7 +105,7 @@ void SIMIX_context_mod_exit(void) finalize_factory = simix_global->context_factory->finalize; finalize_factory(&simix_global->context_factory); } - xbt_dict_remove((xbt_dict_t) _surf_cfg_set,"contexts/factory"); + xbt_dict_remove((xbt_dict_t) _sg_cfg_set,"contexts/factory"); } /** @@ -137,7 +137,6 @@ XBT_INLINE int SIMIX_context_get_nthreads(void) { * \param nb_threads the number of threads to use */ XBT_INLINE void SIMIX_context_set_nthreads(int nb_threads) { - if (nb_threads<=0) { nb_threads = xbt_os_get_numcores(); XBT_INFO("Auto-setting contexts/nthreads to %d",nb_threads); @@ -148,7 +147,6 @@ XBT_INLINE void SIMIX_context_set_nthreads(int nb_threads) { THROWF(arg_error, 0, "The thread factory cannot be run in parallel"); #endif } - smx_parallel_contexts = nb_threads; }