xbt_dict_remove((xbt_dict_t) _sg_cfg_set,"contexts/factory");
}
+void *SIMIX_context_stack_new(void)
+{
+ return xbt_malloc0(smx_context_stack_size);
+}
+
+void SIMIX_context_stack_delete(void *stack)
+{
+ xbt_free(stack);
+}
+
/**
* \brief Returns whether some parallel threads are used
* for the user contexts.
/* if the user provided a function for the process then use it,
otherwise it is the context for maestro */
if (code) {
- context->malloced_stack = xbt_malloc0(smx_context_stack_size);
+ context->malloced_stack = SIMIX_context_stack_new();
context->stack_top =
raw_makecontext(context->malloced_stack, smx_context_stack_size,
(void_f_pvoid_t) smx_ctx_raw_wrapper, context);
context)->valgrind_stack_id);
#endif /* HAVE_VALGRIND_VALGRIND_H */
- free(((smx_ctx_raw_t) context)->malloced_stack);
+ SIMIX_context_stack_delete(((smx_ctx_raw_t) context)->malloced_stack);
+
}
smx_ctx_base_free(context);
}
#ifdef HAVE_VALGRIND_VALGRIND_H
unsigned int valgrind_stack_id; /* the valgrind stack id */
#endif
- char stack[0]; /* the thread stack (must remain the last element of the structure) */
+ char *stack; /* the thread stack */
} s_smx_ctx_sysv_t, *smx_ctx_sysv_t;
#ifdef CONTEXT_THREADS
otherwise it is the context for maestro */
if (code) {
+ context->stack = SIMIX_context_stack_new();
getcontext(&(context->uc));
context->uc.uc_link = NULL;
smx_process_t process)
{
- return smx_ctx_sysv_create_context_sized(sizeof(s_smx_ctx_sysv_t) +
- smx_context_stack_size,
+ return smx_ctx_sysv_create_context_sized(sizeof(s_smx_ctx_sysv_t),
code, argc, argv, cleanup_func,
process);
VALGRIND_STACK_DEREGISTER(((smx_ctx_sysv_t)
context)->valgrind_stack_id);
#endif /* HAVE_VALGRIND_VALGRIND_H */
-
+ SIMIX_context_stack_delete(((smx_ctx_sysv_t)context)->stack);
}
smx_ctx_base_free(context);
}
void SIMIX_context_mod_init(void);
void SIMIX_context_mod_exit(void);
+void *SIMIX_context_stack_new(void);
+void SIMIX_context_stack_delete(void *stack);
+
void SIMIX_context_set_current(smx_context_t context);
smx_context_t SIMIX_context_get_current(void);