X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ca7e44eedb71bed5a09556bdd8e3fa13be21c9ce..9a83532b45e512e41210c7784e5ad22adbc7e442:/src/simix/smx_private.h diff --git a/src/simix/smx_private.h b/src/simix/smx_private.h index 87a76e4379..db37ffb679 100644 --- a/src/simix/smx_private.h +++ b/src/simix/smx_private.h @@ -59,6 +59,14 @@ extern unsigned long simix_process_maxpid; extern xbt_dict_t watched_hosts_lib; +#ifdef __cplusplus +extern "C" { +#endif +void SIMIX_clean(void); +#ifdef __cplusplus +} +#endif + /******************************** Exceptions *********************************/ #define SMX_EXCEPTION(issuer, c, v, m) \ @@ -135,8 +143,8 @@ typedef struct s_smx_action { smx_rdv_t rdv; /* Rendez-vous where the comm is queued */ #ifdef HAVE_MC - smx_rdv_t rdv_cpy; /* Copy of the rendez-vous where the comm is queued, MC needs it for DPOR - (comm.rdv set to NULL when the communication is removed from the mailbox + smx_rdv_t rdv_cpy; /* Copy of the rendez-vous where the comm is queued, MC needs it for DPOR + (comm.rdv set to NULL when the communication is removed from the mailbox (used as garbage collector)) */ #endif int refcount; /* Number of processes involved in the cond */ @@ -165,7 +173,7 @@ typedef struct s_smx_action { void* src_data; /* User data associated to communication */ void* dst_data; - } comm; + } comm; struct { smx_host_t host; /* The host that is sleeping */ @@ -201,6 +209,18 @@ typedef struct s_smx_action { void SIMIX_context_mod_init(void); void SIMIX_context_mod_exit(void); +XBT_PUBLIC_DATA(char sigsegv_stack[SIGSTKSZ]); + +/* We are using the bottom of the stack to save some information, like the + * valgrind_stack_id. Define smx_context_usable_stack_size to give the remaining + * size for the stack. */ +#ifdef HAVE_VALGRIND_VALGRIND_H +# define smx_context_usable_stack_size \ + (smx_context_stack_size - sizeof(unsigned int)) /* for valgrind_stack_id */ +#else +# define smx_context_usable_stack_size smx_context_stack_size +#endif + void *SIMIX_context_stack_new(void); void SIMIX_context_stack_delete(void *stack); @@ -220,12 +240,12 @@ void SIMIX_ctx_raw_factory_init(smx_context_factory_t *factory); /* Scenario for the end of a context: * * CASE 1: death after end of the main function - * the context_wrapper, called internally by the context module, calls - * SIMIX_context_stop after user code stops, smx_context_stop calls user + * the context_wrapper, called internally by the context module, calls + * SIMIX_context_stop after user code stops, smx_context_stop calls user * cleanup_func if any (in context settings), add current process to trashbin * and yields back to maestro. * From time to time, maestro calls SIMIX_context_empty_trash, which destroy - * all the process and context data structures, and frees the memory + * all the process and context data structures, and frees the memory * * CASE 2: brutal death * SIMIX_process_kill (from any process) set process->iwannadie = 1 and then @@ -256,7 +276,7 @@ static XBT_INLINE smx_context_t SIMIX_context_new(xbt_main_func_t code, } /** - * \brief destroy a context + * \brief destroy a context * \param context the context to destroy * Argument must be stopped first -- runs in maestro context */ @@ -295,7 +315,7 @@ static XBT_INLINE void SIMIX_context_runall(void) } /** - \brief returns the current running context + \brief returns the current running context */ static XBT_INLINE smx_context_t SIMIX_context_self(void) {