X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6715913f73b4cbac797fcff126b1db5b121f34bf..7e71d73eb6728d8d498d010976f038789049c131:/src/simix/private.h diff --git a/src/simix/private.h b/src/simix/private.h index 6560c3ecb5..a21e458478 100644 --- a/src/simix/private.h +++ b/src/simix/private.h @@ -9,7 +9,6 @@ #ifndef SIMIX_PRIVATE_H #define SIMIX_PRIVATE_H -#include #include "simix/simix.h" #include "surf/surf.h" #include "xbt/fifo.h" @@ -72,6 +71,7 @@ extern SIMIX_Global_t simix_global; 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 */ @@ -117,6 +117,15 @@ typedef struct s_smx_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 */ @@ -133,27 +142,28 @@ 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_cond_t cond; /* Condition associated to the surf simulation */ + 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; - size_t src_buff_size; 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); -void SIMIX_communication_destroy(smx_comm_t comm); 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); @@ -168,6 +178,7 @@ typedef enum {ready, ongoing, done, failed} smx_action_state_t; typedef struct s_smx_action { char *name; /**< @brief action name if any */ xbt_fifo_t cond_list; /*< conditional variables that must be signaled when the action finish. */ + xbt_fifo_t sem_list; /*< semaphores that must be signaled when the action finish. */ void *data; /**< @brief user data */ int refcount; /**< @brief reference counter */ surf_action_t surf_action; /* SURF modeling of computation */ @@ -261,7 +272,6 @@ typedef struct s_smx_context_factory { smx_pfn_context_factory_create_context_t create_context; smx_pfn_context_factory_finalize_t finalize; smx_pfn_context_free_t free; - smx_pfn_context_start_t start; smx_pfn_context_stop_t stop; smx_pfn_context_suspend_t suspend; smx_pfn_context_resume_t resume; @@ -282,6 +292,9 @@ void SIMIX_context_init_factory_by_name(smx_context_factory_t * factory, const c void SIMIX_ctx_thread_factory_init(smx_context_factory_t * factory); void SIMIX_ctx_sysv_factory_init(smx_context_factory_t * factory); +void SIMIX_ctx_lua_factory_init(smx_context_factory_t * factory); +void SIMIX_ctx_lua_factory_set_state(void *state); + void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory); @@ -317,8 +330,8 @@ void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory); static inline smx_context_t SIMIX_context_new(xbt_main_func_t code, int argc, char** argv, void_f_pvoid_t cleanup_func, - void* cleanup_arg) -{ + void* cleanup_arg) { + return (*(simix_global->context_factory->create_context)) (code, argc, argv, cleanup_func, cleanup_arg); } @@ -328,27 +341,15 @@ static inline smx_context_t SIMIX_context_new(xbt_main_func_t code, int argc, * \param context the context to destroy * Argument must be stopped first -- runs in maestro context */ -static inline void SIMIX_context_free(smx_context_t context) -{ +static inline void SIMIX_context_free(smx_context_t context) { (*(simix_global->context_factory->free)) (context); } -/** - * \brief prepares aa context to be run - * \param context the context to start - * It will however run effectively only when calling #SIMIX_process_schedule - */ -static inline void SIMIX_context_start(smx_context_t context) -{ - (*(simix_global->context_factory->start)) (context); -} - /** * \brief stops the execution of a context * \param context to stop */ -static inline void SIMIX_context_stop(smx_context_t context) -{ +static inline void SIMIX_context_stop(smx_context_t context) { (*(simix_global->context_factory->stop)) (context); }