X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0e9c0448c6566825b170b98ecff716b098bda10e..28e0e67cf29da1423d9932ec05870d08394af669:/src/simix/smx_private.h diff --git a/src/simix/smx_private.h b/src/simix/smx_private.h index d8c251962f..24d8a2c020 100644 --- a/src/simix/smx_private.h +++ b/src/simix/smx_private.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2010, 2012-2013. The SimGrid Team. +/* Copyright (c) 2007-2010, 2012-2014. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -59,6 +59,14 @@ extern unsigned long simix_process_maxpid; extern xbt_dict_t watched_hosts_lib; +#ifdef __cplusplus +extern "C" { +#endif +XBT_PUBLIC(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 */ @@ -198,26 +206,26 @@ typedef struct s_smx_action { #endif } s_smx_action_t; -/* FIXME: check if we can delete this function */ -static XBT_INLINE e_smx_state_t SIMIX_action_map_state(e_surf_action_state_t state) -{ - switch (state) { - case SURF_ACTION_READY: - return SIMIX_READY; - case SURF_ACTION_RUNNING: - return SIMIX_RUNNING; - case SURF_ACTION_FAILED: - return SIMIX_FAILED; - case SURF_ACTION_DONE: - return SIMIX_DONE; - default: - xbt_die("Unexpected SURF action state"); - } -} - void SIMIX_context_mod_init(void); void SIMIX_context_mod_exit(void); +#ifndef WIN32 +XBT_PUBLIC_DATA(char sigsegv_stack[SIGSTKSZ]); +#endif + +/* 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); + void SIMIX_context_set_current(smx_context_t context); smx_context_t SIMIX_context_get_current(void); @@ -234,12 +242,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 @@ -270,7 +278,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 */ @@ -309,7 +317,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) { @@ -320,13 +328,13 @@ static XBT_INLINE smx_context_t SIMIX_context_self(void) } /** - \brief returns the data associated to a context + \brief returns the SIMIX process associated to a context \param context The context - \return The data + \return The SIMIX process */ -static XBT_INLINE void* SIMIX_context_get_data(smx_context_t context) +static XBT_INLINE smx_process_t SIMIX_context_get_process(smx_context_t context) { - return simix_global->context_factory->get_data(context); + return simix_global->context_factory->get_process(context); } XBT_PUBLIC(int) SIMIX_process_get_maxpid(void);