int smx_context_stack_size = 128 * 1024;
#ifdef HAVE_THREAD_LOCAL_STORAGE
-__thread smx_context_t smx_current_context;
+static __thread smx_context_t smx_current_context_parallel;
#else
-smx_context_t smx_current_context; /* define it anyway, will be used in non-parallel mode */
static xbt_os_thread_key_t smx_current_context_key = 0;
#endif
-
+static smx_context_t smx_current_context_serial;
static int smx_parallel_contexts = 1;
static int smx_parallel_threshold = 2;
if (!simix_global->context_factory) {
/* select the context factory to use to create the contexts */
if (smx_factory_initializer_to_use) {
- (*smx_factory_initializer_to_use)(&(simix_global->context_factory));
+ smx_factory_initializer_to_use(&simix_global->context_factory);
}
else { /* use the factory specified by --cfg=contexts/factory:value */
/* finalize the context factory */
finalize_factory = simix_global->context_factory->finalize;
- (*finalize_factory) (&simix_global->context_factory);
+ finalize_factory(&simix_global->context_factory);
}
xbt_dict_remove((xbt_dict_t) _surf_cfg_set,"contexts/factory");
}
*/
XBT_INLINE smx_context_t SIMIX_context_get_current(void)
{
+ if (SIMIX_context_is_parallel()) {
#ifdef HAVE_THREAD_LOCAL_STORAGE
- return smx_current_context;
+ return smx_current_context_parallel;
#else
- return xbt_os_thread_get_specific(smx_current_context_key);
+ return xbt_os_thread_get_specific(smx_current_context_key);
#endif
+ }
+ else {
+ return smx_current_context_serial;
+ }
}
/**
*/
XBT_INLINE void SIMIX_context_set_current(smx_context_t context)
{
+ if (SIMIX_context_is_parallel()) {
#ifdef HAVE_THREAD_LOCAL_STORAGE
- smx_current_context = context;
+ smx_current_context_parallel = context;
#else
- xbt_os_thread_set_specific(smx_current_context_key, context);
+ xbt_os_thread_set_specific(smx_current_context_key, context);
#endif
+ }
+ else {
+ smx_current_context_serial = context;
+ }
}