X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5880a1bbbf150def1664cfefd6ec7f36f56edfaa..95593758ba86cb7c19a171174bcb1a46848e5caf:/src/simix/smx_context.c diff --git a/src/simix/smx_context.c b/src/simix/smx_context.c index 12552da99c..662f38288a 100644 --- a/src/simix/smx_context.c +++ b/src/simix/smx_context.c @@ -14,6 +14,10 @@ #include "simgrid/sg_config.h" #include "internal_config.h" +#ifdef HAVE_VALGRIND_VALGRIND_H +# include +#endif + XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_context, simix, "Context switching mechanism"); @@ -21,6 +25,8 @@ char* smx_context_factory_name = NULL; /* factory name specified by --cfg=contex smx_ctx_factory_initializer_t smx_factory_initializer_to_use = NULL; int smx_context_stack_size; int smx_context_stack_size_was_set = 0; +int smx_context_guard_size; +int smx_context_guard_size_was_set = 0; #ifdef HAVE_THREAD_LOCAL_STORAGE static __thread smx_context_t smx_current_context_parallel; #else @@ -101,11 +107,30 @@ void SIMIX_context_mod_exit(void) void *SIMIX_context_stack_new(void) { - return xbt_malloc0(smx_context_stack_size); + void *stack = xbt_malloc0(smx_context_stack_size); + +#ifdef HAVE_VALGRIND_VALGRIND_H + unsigned int valgrind_stack_id = + VALGRIND_STACK_REGISTER(stack, (char *)stack + smx_context_stack_size); + memcpy((char *)stack + smx_context_usable_stack_size, &valgrind_stack_id, + sizeof valgrind_stack_id); +#endif + + return stack; } void SIMIX_context_stack_delete(void *stack) { + if (!stack) + return; + +#ifdef HAVE_VALGRIND_VALGRIND_H + unsigned int valgrind_stack_id; + memcpy(&valgrind_stack_id, (char *)stack + smx_context_usable_stack_size, + sizeof valgrind_stack_id); + VALGRIND_STACK_DEREGISTER(valgrind_stack_id); +#endif + xbt_free(stack); }