X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/821649e2221068a113b41b8e9c5ac4ba76887772..7a4e264744a18d8953c3bd5e4a1df05f5d6088b9:/src/simix/private.h diff --git a/src/simix/private.h b/src/simix/private.h index 4fd9db7783..8a41816b6b 100644 --- a/src/simix/private.h +++ b/src/simix/private.h @@ -17,6 +17,7 @@ #include "xbt/dict.h" #include "xbt/config.h" #include "xbt/function_types.h" +#include "xbt/ex_interface.h" /******************************** Datatypes ***********************************/ @@ -65,11 +66,13 @@ extern SIMIX_Global_t simix_global; char *name; /**< @brief process name if any */ smx_host_t smx_host; /* the host on which the process is running */ smx_context_t context; /* the context that executes the scheduler function */ + ex_ctx_t *exception; int blocked : 1; int suspended : 1; int iwannadie : 1; smx_mutex_t mutex; /* mutex on which the process is blocked */ smx_cond_t cond; /* cond on which the process is blocked */ + smx_action_t waiting_action; xbt_dict_t properties; void *data; /* kept for compatibility, it should be replaced with moddata */ @@ -87,9 +90,12 @@ typedef struct s_smx_process_arg { xbt_dict_t properties; } s_smx_process_arg_t, *smx_process_arg_t; +void SIMIX_create_maestro_process(void); void SIMIX_process_empty_trash(void); -void __SIMIX_process_schedule(smx_process_t process); -void __SIMIX_process_yield(void); +void SIMIX_process_schedule(smx_process_t process); +void SIMIX_process_yield(void); +ex_ctx_t *SIMIX_process_get_exception(void); +void SIMIX_process_exception_terminate(xbt_ex_t * e); /*************************** Mutex and Conditional ****************************/ @@ -112,8 +118,35 @@ typedef struct s_smx_cond { } s_smx_cond_t; +/******************************* Networking ***********************************/ + +/** @brief Rendez-vous point datatype */ +typedef struct s_smx_rvpoint { + char *name; + smx_mutex_t read; + smx_mutex_t write; + smx_mutex_t comm_mutex; + xbt_fifo_t comm_fifo; +} s_smx_rvpoint_t; + +typedef struct s_smx_comm { + smx_host_t src_host; + smx_host_t dst_host; + smx_rvpoint_t rdv; + smx_cond_t cond; + smx_action_t act; + void *data; + size_t data_size; + void **dest_buff; + size_t dest_buff_size; + double rate; + int refcount; +} s_smx_comm_t; + /********************************* Action *************************************/ +typedef enum {ready, ongoing, done, failed} smx_action_state_t; + /** @brief Action datatype @ingroup m_datatypes_management_details */ typedef struct s_smx_action { @@ -140,7 +173,6 @@ void __SIMIX_host_destroy(void *host); void __SIMIX_cond_wait(smx_cond_t cond); void __SIMIX_cond_display_actions(smx_cond_t cond); void __SIMIX_action_display_conditions(smx_action_t action); -void __SIMIX_create_maestro_process(void); /******************************** Context *************************************/ @@ -157,7 +189,6 @@ void SIMIX_context_mod_exit(void); /* each context type must contain this macro at its begining -- OOP in C :/ */ #define SMX_CTX_BASE_T \ s_xbt_swag_hookup_t hookup; \ - ex_ctx_t *exception; \ xbt_main_func_t code; \ int argc; \ char **argv; \ @@ -190,9 +221,6 @@ typedef struct s_smx_context { typedef smx_context_t (*smx_pfn_context_factory_create_context_t) (xbt_main_func_t, int, char**, void_f_pvoid_t, void*); -/* function used to create the context for the maestro process */ -typedef smx_context_t (*smx_pfn_context_factory_create_maestro_context_t) (void); - /* this function finalize the specified context factory */ typedef int (*smx_pfn_context_factory_finalize_t) (smx_context_factory_t*); @@ -214,7 +242,6 @@ typedef void (*smx_pfn_context_resume_t) (smx_context_t old_context, /* interface of the context factories */ typedef struct s_smx_context_factory { - smx_pfn_context_factory_create_maestro_context_t create_maestro_context; smx_pfn_context_factory_create_context_t create_context; smx_pfn_context_factory_finalize_t finalize; smx_pfn_context_free_t free; @@ -263,14 +290,6 @@ void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory); * iwannadie == 1, and call SIMIX_context_stop(same than first case afterward) */ -/** - * \brief creates the context for the maestro process - */ -static inline smx_context_t SIMIX_context_create_maestro() -{ - return (*(simix_global->context_factory->create_maestro_context)) (); -} - /** * \brief creates a new context for a user level process * \param code a main function