Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Incomplete port of MSG on top of SIMIX_network [Cristian]
[simgrid.git] / src / simix / private.h
index da4b964..8d40e0e 100644 (file)
@@ -17,6 +17,7 @@
 #include "xbt/dict.h"
 #include "xbt/config.h"
 #include "xbt/function_types.h"
+#include "xbt/ex_interface.h"
 
 /******************************** Datatypes ***********************************/
 
@@ -54,9 +55,7 @@ extern SIMIX_Global_t simix_global;
 
 /******************************** Process *************************************/
 
-typedef struct s_smx_context *smx_context_t;
-
-/** @brief Process datatype
+/** @brief Process datatype 
     @ingroup m_datatypes_management_details @{ */
      typedef struct s_smx_process {
        s_xbt_swag_hookup_t process_hookup;
@@ -67,11 +66,13 @@ typedef struct s_smx_context *smx_context_t;
        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 */
 
@@ -89,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 ****************************/
 
@@ -114,8 +118,36 @@ 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;
+  xbt_fifo_t comm_fifo;  
+} s_smx_rvpoint_t;
+
+typedef struct s_smx_comm {
+  smx_comm_type_t type;
+  smx_host_t src_host;
+  smx_host_t dst_host;
+  smx_rdv_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;
+  double task_size;
+  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 {
@@ -142,7 +174,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 *************************************/
 
@@ -159,7 +190,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; \
@@ -192,9 +222,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*);
 
@@ -216,7 +243,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;
@@ -265,14 +291,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