Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Perf improvement: Change libdata to a set so that we can search for stuff by ID ...
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 9 Sep 2005 10:31:08 +0000 (10:31 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Fri, 9 Sep 2005 10:31:08 +0000 (10:31 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1717 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/gras/Msg/msg.c
src/gras/Msg/msg_interface.h
src/gras/Msg/msg_private.h
src/gras/Msg/sg_msg.c
src/gras/Msg/timer.c

index d6cc3a4..6281d39 100644 (file)
@@ -27,6 +27,8 @@ char _GRAS_header[6];
 static void *gras_msg_procdata_new() {
    gras_msg_procdata_t res = xbt_new(s_gras_msg_procdata_t,1);
    
+   res->name = xbt_strdup("gras_msg");
+   res->name_len = 0;
    res->msg_queue = xbt_dynar_new(sizeof(s_gras_msg_t),   NULL);
    res->cbl_list  = xbt_dynar_new(sizeof(gras_cblist_t *),gras_cbl_free);
    res->timers    = xbt_dynar_new(sizeof(s_gras_timer_t), NULL);
@@ -50,8 +52,9 @@ static void gras_msg_procdata_free(void *data) {
 /*
  * Module registration
  */
+int gras_msg_libdata_id;
 void gras_msg_register() {
-   gras_procdata_add("gras_msg",gras_msg_procdata_new, gras_msg_procdata_free);
+   gras_msg_libdata_id = gras_procdata_add("gras_msg",gras_msg_procdata_new, gras_msg_procdata_free);
 }
 
 /*
@@ -220,7 +223,7 @@ gras_msg_wait(double           timeout,
   void *payload_got;
   int payload_size_got;
   double start, now;
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
   int cpt;
   s_gras_msg_t msg;
   gras_socket_t expeditor_res = NULL;
@@ -294,7 +297,7 @@ gras_msg_handle(double timeOut) {
   int             payload_size;
   gras_msgtype_t  msgtype;
 
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
   gras_cblist_t  *list=NULL;
   gras_msg_cb_t       cb;
    
@@ -416,7 +419,7 @@ gras_cbl_free(void *data){
 void
 gras_cb_register(gras_msgtype_t msgtype,
                 gras_msg_cb_t cb) {
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
   gras_cblist_t *list=NULL;
   int cpt;
 
@@ -447,7 +450,7 @@ void
 gras_cb_unregister(gras_msgtype_t msgtype,
                   gras_msg_cb_t cb) {
 
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
   gras_cblist_t *list;
   gras_msg_cb_t cb_cpt;
   int cpt;
index 1f8f3b0..a6b84c9 100644 (file)
  * FIXME: it could be cleaned up ?
  */
 typedef struct {
+  /* set headers */
+  unsigned int ID;
+  char        *name;
+  unsigned int name_len;
+
   /*queue of msgs storing the ones got while msg_wait'ing for something else */
   xbt_dynar_t msg_queue; /* elm type: s_gras_msg_t */
 
index 6e8b0ad..20f28c1 100644 (file)
@@ -29,6 +29,8 @@
 #include "gras/Msg/msg_interface.h"
 
 extern char _GRAS_header[6];
+
+extern int gras_msg_libdata_id; /* The identifier of our libdata */
  
 /** @brief Message instance */
 typedef struct {
index 2aeed71..cce652b 100644 (file)
@@ -58,9 +58,8 @@ gras_msg_recv(gras_socket_t    sock,
              int             *payload_size) {
 
   m_task_t task=NULL;
-  /*  gras_trp_sg_sock_data_t *sock_data = (gras_trp_sg_sock_data_t *)sock->data;*/
   gras_msg_t msg;
-  gras_trp_procdata_t pd=(gras_trp_procdata_t)gras_libdata_get("gras_trp");
+  gras_trp_procdata_t pd=(gras_trp_procdata_t)gras_libdata_by_name("gras_trp");
 
   xbt_assert1(!gras_socket_is_meas(sock), 
              "Asked to receive a message on the measurement socket %p", sock);
@@ -76,62 +75,4 @@ gras_msg_recv(gras_socket_t    sock,
   free(msg);
   if (MSG_task_destroy(task) != MSG_OK)
     THROW0(system_error,0,"Error in MSG_task_destroy()");
-
-
-  /*
-  THROW_UNIMPLEMENTED;
-
-  xbt_ex_t e;
-  static gras_datadesc_type_t string_type=NULL;
-  char header[6];
-  int cpt;
-  int r_arch;
-  char *msg_name=NULL;
-
-  if (!string_type) {
-    string_type=gras_datadesc_by_name("string");
-    xbt_assert(string_type);
-  }
-  
-  TRY {
-    gras_trp_chunk_recv(sock, header, 6);
-  } CATCH(e) {
-    RETHROW1("Exception caught while trying to get the mesage header on socket %p: %s",
-            sock);
-  }
-
-  for (cpt=0; cpt<4; cpt++)
-    if (header[cpt] != _GRAS_header[cpt])
-      THROW2(mismatch_error,0,
-            "Incoming bytes do not look like a GRAS message (header='%.4s' not '%.4s')",header,_GRAS_header);
-  if (header[4] != _GRAS_header[4]) 
-    THROW2(mismatch_error,0,"GRAS protocol mismatch (got %d, use %d)",
-          (int)header[4], (int)_GRAS_header[4]);
-  r_arch = (int)header[5];
-  DEBUG2("Handle an incoming message using protocol %d (remote is %s)",
-        (int)header[4],gras_datadesc_arch_name(r_arch));
-
-  gras_datadesc_recv(sock, string_type, r_arch, &msg_name);
-  TRY {
-    *msgtype = (gras_msgtype_t)xbt_set_get_by_name(_gras_msgtype_set,msg_name);
-  } CATCH(e) {
-    / * FIXME: Survive unknown messages * /
-    RETHROW1("Exception caught while retrieving the type associated to messages '%s' : %s",
-            msg_name);
-  }
-  free(msg_name);
-
-  if ((*msgtype)->ctn_type) {
-    *payload_size=gras_datadesc_size((*msgtype)->ctn_type);
-    xbt_assert2(*payload_size > 0,
-               "%s %s",
-               "Dynamic array as payload is forbided for now (FIXME?).",
-               "Reference to dynamic array is allowed.");
-    *payload = xbt_malloc(*payload_size);
-    gras_datadesc_recv(sock, (*msgtype)->ctn_type, r_arch, *payload);
-  } else {
-    *payload = NULL;
-    *payload_size = 0;
-  }
-*/
 }
index 3c2d398..513b289 100644 (file)
@@ -18,7 +18,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(gras_timer,gras,
 
 /** @brief Request \a action to be called once in \a delay seconds */
 void gras_timer_delay(double delay, void_f_void_t action) {
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
    
   gras_timer_t timer = xbt_dynar_push_ptr(pd->timers);
    
@@ -31,7 +31,7 @@ void gras_timer_delay(double delay, void_f_void_t action) {
 
 /** @brief Request \a action to be called every \a interval seconds */
 void gras_timer_repeat(double interval, void_f_void_t action) {
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
    
   gras_timer_t timer = xbt_dynar_push_ptr(pd->timers);
 
@@ -44,7 +44,7 @@ void gras_timer_repeat(double interval, void_f_void_t action) {
 
 /** @brief Cancel a delayed task */
 void gras_timer_cancel_delay(double interval, void_f_void_t action) {
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
   int cursor,found;
   s_gras_timer_t timer;
 
@@ -67,7 +67,7 @@ void gras_timer_cancel_delay(double interval, void_f_void_t action) {
 
 /** @brief Cancel a repetitive task */
 void gras_timer_cancel_repeat(double interval, void_f_void_t action) {
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
   int cursor,found;
   s_gras_timer_t timer;
 
@@ -89,7 +89,7 @@ void gras_timer_cancel_repeat(double interval, void_f_void_t action) {
 
 /** @brief Cancel all delayed tasks */
 void gras_timer_cancel_delay_all(void) {
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
   int cursor, found;
   s_gras_timer_t timer;
 
@@ -109,7 +109,7 @@ void gras_timer_cancel_delay_all(void) {
 
 /** @brief Cancel all repetitive tasks */
 void gras_timer_cancel_repeat_all(void){
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
   int cursor, found;
   s_gras_timer_t timer;
 
@@ -128,14 +128,14 @@ void gras_timer_cancel_repeat_all(void){
 
 /** @brief Cancel all delayed and repetitive tasks */
 void gras_timer_cancel_all(void) {
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
   xbt_dynar_reset( pd->timers );
 }
 
    
 /* returns 0 if it handled a timer, or the delay until next timer, or -1 if no armed timer */
 double gras_msg_timer_handle(void) {
-  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg");
+  gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id);
   int cursor;
   gras_timer_t timer;
   double now=gras_os_time();