Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
various little cleanups in the gras/sg code. Mainly reindentation and more informativ...
[simgrid.git] / src / gras / Transport / transport_interface.h
index b606cf7..63547d2 100644 (file)
@@ -13,6 +13,7 @@
 #define GRAS_TRP_INTERFACE_H
 
 #include "portable.h" /* sometimes needed for fd_set */
+#include "simix/simix.h"
 
 /***
  *** Options
@@ -23,15 +24,16 @@ extern int gras_opt_trp_nomoredata_on_close;
  *** Main user functions
  ***/
 /* stable if we know the storage will keep as is until the next trp_flush */
-void gras_trp_send(gras_socket_t sd, char *data, long int size, int stable);
-void gras_trp_recv(gras_socket_t sd, char *data, long int size);
-void gras_trp_flush(gras_socket_t sd);
+XBT_PUBLIC(void) gras_trp_send(gras_socket_t sd, char *data, long int size,
+                              int stable);
+XBT_PUBLIC(void) gras_trp_recv(gras_socket_t sd, char *data, long int size);
+XBT_PUBLIC(void) gras_trp_flush(gras_socket_t sd);
 
 /* Find which socket needs to be read next */
-gras_socket_t gras_trp_select(double timeout);
+XBT_PUBLIC(gras_socket_t) gras_trp_select(double timeout);
 
 /* Set the peer process name (used by messaging layer) */
-void gras_socket_peer_proc_set(gras_socket_t sock,char*peer_proc);
+XBT_PUBLIC(void) gras_socket_peer_proc_set(gras_socket_t sock,char*peer_proc);
 
 /***
  *** Plugin mechanism 
@@ -80,12 +82,14 @@ struct gras_trp_plugin_ {
 
   void *data; /* plugin-specific data */
  
-   /* exit is responsible for freeing data and telling the OS this plugin goes */
-   /* exit=NULL, data gets freed. (ie exit function needed only when data contains pointers) */
+   /* exit is responsible for freeing data and telling to the OS that 
+      this plugin is gone */
+   /* exit=NULL, data gets brutally free()d by the generic interface. 
+      (ie exit function needed only when data contains pointers) */
   void (*exit)(gras_trp_plugin_t);
 };
 
-gras_trp_plugin_t
+XBT_PUBLIC(gras_trp_plugin_t) 
 gras_trp_plugin_get_by_name(const char *name);
 
 /* Data of this module specific to each process
@@ -97,17 +101,27 @@ typedef struct {
   char        *name;
   unsigned int name_len;
 
-  xbt_dynar_t sockets; /* all sockets known to this process */
   int myport; /* Port on which I listen myself */
-  fd_set *fdset;
+   
+  xbt_dynar_t sockets; /* all sockets known to this process */
+  fd_set *fdset; /* idem, in another formalism */
 
   /* SG only elements. In RL, they are part of the OS ;) */
-  int chan;    /* Formated messages channel */
-  int measChan; /* Unformated echange channel for performance measurement*/
+   
+  /* List of sockets ready to be select()ed */
+  xbt_fifo_t msg_selectable_sockets; /* regular sockets  */
+  xbt_fifo_t meas_selectable_sockets;/* measurement ones */
+
+  /* Synchronisation on msg_selectable_sockets */
+  smx_cond_t msg_select_cond;
+  smx_mutex_t msg_select_mutex;
+  /* Synchronisation on meas_selectable_sockets */
+  smx_cond_t meas_select_cond;
+  smx_mutex_t meas_select_mutex;
    
 } s_gras_trp_procdata_t,*gras_trp_procdata_t;
 
 /* Display the content of our socket set (debugging purpose) */
-void gras_trp_socketset_dump(const char *name);
+XBT_PUBLIC(void) gras_trp_socketset_dump(const char *name);
 
 #endif /* GRAS_TRP_INTERFACE_H */