- void_f_pvoid_t kill_process_function;
- void_f_pvoid_t cleanup_process_function;
-} s_SIMIX_Global_t, *SIMIX_Global_t;
-
-extern SIMIX_Global_t simix_global;
-
-/******************************** Process *************************************/
-
-/** @brief Process datatype
- @ingroup m_datatypes_management_details @{ */
- typedef struct s_smx_process {
- s_xbt_swag_hookup_t process_hookup;
- s_xbt_swag_hookup_t synchro_hookup; /* process_to_run or mutex->sleeping and co */
- s_xbt_swag_hookup_t host_proc_hookup;
- s_xbt_swag_hookup_t destroy_hookup;
-
- 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_sem_t sem; /* semaphore 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 */
-
- } s_smx_process_t;
-/** @} */
-
-typedef struct s_smx_process_arg {
- const char *name;
- xbt_main_func_t code;
- void *data;
- char *hostname;
- int argc;
- char **argv;
- double kill_time;
- 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);
-ex_ctx_t *SIMIX_process_get_exception(void);
-void SIMIX_process_exception_terminate(xbt_ex_t * e);
-
-/*************************** Mutex and Conditional ****************************/
-
-typedef struct s_smx_mutex {
-
- /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_mutex */
- xbt_swag_t sleeping; /* list of sleeping process */
- int refcount;
- /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_mutex */
-
-} s_smx_mutex_t;
-
-typedef struct s_smx_cond {
-
- /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_cond */
- xbt_swag_t sleeping; /* list of sleeping process */
- smx_mutex_t mutex;
- xbt_fifo_t actions; /* list of actions */
- /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_cond */
-
-} s_smx_cond_t;
-
-typedef struct s_smx_sem {
- /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_sem */
- xbt_swag_t sleeping; /* list of sleeping process */
- int capacity;
- xbt_fifo_t actions; /* list of actions */
- /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_sem */
-
-} s_smx_sem_t;
-
-/******************************* Networking ***********************************/
-
-/** @brief Rendez-vous point datatype */
-typedef struct s_smx_rvpoint {
- char *name;
- smx_mutex_t read;
- smx_mutex_t write;
- xbt_fifo_t comm_fifo;
- void *data;
-} s_smx_rvpoint_t;
-
-typedef struct s_smx_comm {
-
-
- smx_comm_type_t type; /* Type of the communication (comm_send,comm_recv) */
- smx_rdv_t rdv; /* Rendez-vous where the comm is queued */
- smx_sem_t sem; /* Semaphore associated to the surf simulation */
- int refcount; /* Number of processes involved in the cond */
-
- /* Surf action data */
- smx_process_t src_proc;
- smx_process_t dst_proc;
- smx_action_t src_timeout;
- smx_action_t dst_timeout;
- smx_action_t act;
- double rate;
- double task_size;
-
- /* Data to be transfered */
- void *src_buff;
- void *dst_buff;
- size_t src_buff_size;
- size_t *dst_buff_size;
- void *data; /* User data associated to communication */
-} s_smx_comm_t;
-
-void SIMIX_network_copy_data(smx_comm_t comm);
-smx_comm_t SIMIX_communication_new(smx_comm_type_t type);
-static inline void SIMIX_communication_use(smx_comm_t comm);
-static inline void SIMIX_communication_wait_for_completion(smx_comm_t comm, double timeout);
-static inline void SIMIX_rdv_push(smx_rdv_t rdv, smx_comm_t comm);
-static inline void SIMIX_rdv_remove(smx_rdv_t rdv, smx_comm_t comm);