A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
In sequential mode, don't use thread-specific data
[simgrid.git]
/
src
/
simix
/
smx_context.c
diff --git
a/src/simix/smx_context.c
b/src/simix/smx_context.c
index
ec51170
..
4926372
100644
(file)
--- a/
src/simix/smx_context.c
+++ b/
src/simix/smx_context.c
@@
-22,12
+22,11
@@
smx_ctx_factory_initializer_t smx_factory_initializer_to_use = NULL;
int smx_context_stack_size = 128 * 1024;
#ifdef HAVE_THREAD_LOCAL_STORAGE
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
#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 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;
static int smx_parallel_contexts = 1;
static int smx_parallel_threshold = 2;
@@
-182,11
+181,16
@@
XBT_INLINE int SIMIX_context_get_parallel_threshold(void) {
*/
XBT_INLINE smx_context_t SIMIX_context_get_current(void)
{
*/
XBT_INLINE smx_context_t SIMIX_context_get_current(void)
{
+ if (SIMIX_context_is_parallel()) {
#ifdef HAVE_THREAD_LOCAL_STORAGE
#ifdef HAVE_THREAD_LOCAL_STORAGE
-
return smx_current_context
;
+
return smx_current_context_parallel
;
#else
#else
- return xbt_os_thread_get_specific(smx_current_context_key);
+
return xbt_os_thread_get_specific(smx_current_context_key);
#endif
#endif
+ }
+ else {
+ return smx_current_context_serial;
+ }
}
/**
}
/**
@@
-195,10
+199,15
@@
XBT_INLINE smx_context_t SIMIX_context_get_current(void)
*/
XBT_INLINE void SIMIX_context_set_current(smx_context_t context)
{
*/
XBT_INLINE void SIMIX_context_set_current(smx_context_t context)
{
+ if (SIMIX_context_is_parallel()) {
#ifdef HAVE_THREAD_LOCAL_STORAGE
#ifdef HAVE_THREAD_LOCAL_STORAGE
-
smx_current_context
= context;
+
smx_current_context_parallel
= context;
#else
#else
- xbt_os_thread_set_specific(smx_current_context_key, context);
+
xbt_os_thread_set_specific(smx_current_context_key, context);
#endif
#endif
+ }
+ else {
+ smx_current_context_serial = context;
+ }
}
}