Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
be more explicit when we die because we got an unknown message type (plus eclipse...
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 10 Mar 2009 15:02:32 +0000 (15:02 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 10 Mar 2009 15:02:32 +0000 (15:02 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6150 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/gras/Msg/rl_msg.c

index 09c4b73..148661d 100644 (file)
@@ -25,7 +25,7 @@ void gras_msg_send_ext(gras_socket_t   sock,
   static gras_datadesc_type_t string_type=NULL;
   static gras_datadesc_type_t ulong_type=NULL;
   char c_kind=(char)kind;
   static gras_datadesc_type_t string_type=NULL;
   static gras_datadesc_type_t ulong_type=NULL;
   char c_kind=(char)kind;
-  
+
   xbt_assert0(msgtype,"Cannot send the NULL message");
 
   if (!string_type) {
   xbt_assert0(msgtype,"Cannot send the NULL message");
 
   if (!string_type) {
@@ -37,14 +37,14 @@ void gras_msg_send_ext(gras_socket_t   sock,
     xbt_assert(ulong_type);
   }
 
     xbt_assert(ulong_type);
   }
 
-  DEBUG3("send '%s' to %s:%d", msgtype->name, 
+  DEBUG3("send '%s' to %s:%d", msgtype->name,
         gras_socket_peer_name(sock),gras_socket_peer_port(sock));
   gras_trp_send(sock, _GRAS_header, 6, 1 /* stable */);
   gras_trp_send(sock, &c_kind,      1, 1 /* stable */);
   switch (kind) {
         gras_socket_peer_name(sock),gras_socket_peer_port(sock));
   gras_trp_send(sock, _GRAS_header, 6, 1 /* stable */);
   gras_trp_send(sock, &c_kind,      1, 1 /* stable */);
   switch (kind) {
-   case e_gras_msg_kind_oneway: 
+   case e_gras_msg_kind_oneway:
      break;
      break;
-     
+
    case e_gras_msg_kind_rpccall:
    case e_gras_msg_kind_rpcanswer:
    case e_gras_msg_kind_rpcerror:
    case e_gras_msg_kind_rpccall:
    case e_gras_msg_kind_rpcanswer:
    case e_gras_msg_kind_rpcerror:
@@ -54,7 +54,7 @@ void gras_msg_send_ext(gras_socket_t   sock,
    default:
      THROW1(unknown_error,0,"Unknown msg kind %d",kind);
   }
    default:
      THROW1(unknown_error,0,"Unknown msg kind %d",kind);
   }
-   
+
   gras_datadesc_send(sock, string_type,   &msgtype->name);
   if (kind == e_gras_msg_kind_rpcerror) {
      /* error on remote host, carfull, payload is an exception */
   gras_datadesc_send(sock, string_type,   &msgtype->name);
   if (kind == e_gras_msg_kind_rpcerror) {
      /* error on remote host, carfull, payload is an exception */
@@ -67,15 +67,15 @@ void gras_msg_send_ext(gras_socket_t   sock,
      if (msgtype->ctn_type)
        gras_datadesc_send(sock, msgtype->ctn_type, payload);
   }
      if (msgtype->ctn_type)
        gras_datadesc_send(sock, msgtype->ctn_type, payload);
   }
-   
+
   gras_trp_flush(sock);
 }
 
 const char *hexa_str(unsigned char *data, int size, int downside);
   gras_trp_flush(sock);
 }
 
 const char *hexa_str(unsigned char *data, int size, int downside);
-   
-   
+
+
 /*
 /*
- * receive the next message on the given socket.  
+ * receive the next message on the given socket.
  */
 void
 gras_msg_recv(gras_socket_t    sock,
  */
 void
 gras_msg_recv(gras_socket_t    sock,
@@ -90,7 +90,7 @@ gras_msg_recv(gras_socket_t    sock,
   char *msg_name=NULL;
   char c_kind;
 
   char *msg_name=NULL;
   char c_kind;
 
-  xbt_assert1(!gras_socket_is_meas(sock), 
+  xbt_assert1(!gras_socket_is_meas(sock),
              "Asked to receive a message on the measurement socket %p", sock);
   if (!string_type) {
     string_type=gras_datadesc_by_name("string");
              "Asked to receive a message on the measurement socket %p", sock);
   if (!string_type) {
     string_type=gras_datadesc_by_name("string");
@@ -101,7 +101,7 @@ gras_msg_recv(gras_socket_t    sock,
     xbt_assert(ulong_type);
   }
 
     xbt_assert(ulong_type);
   }
 
-  
+
   TRY {
     gras_trp_recv(sock, header, 6);
     gras_trp_recv(sock, &c_kind, 1);
   TRY {
     gras_trp_recv(sock, header, 6);
     gras_trp_recv(sock, &c_kind, 1);
@@ -115,21 +115,21 @@ gras_msg_recv(gras_socket_t    sock,
       THROW2(mismatch_error,0,
             "Incoming bytes do not look like a GRAS message (header='%s'  not '%.4s')",
             hexa_str((unsigned char*)header,4,0),_GRAS_header);
       THROW2(mismatch_error,0,
             "Incoming bytes do not look like a GRAS message (header='%s'  not '%.4s')",
             hexa_str((unsigned char*)header,4,0),_GRAS_header);
-  if (header[4] != _GRAS_header[4]) 
+  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];
 
   switch (msg->kind) {
     THROW2(mismatch_error,0,"GRAS protocol mismatch (got %d, use %d)",
           (int)header[4], (int)_GRAS_header[4]);
   r_arch = (int)header[5];
 
   switch (msg->kind) {
-  case e_gras_msg_kind_oneway: 
+  case e_gras_msg_kind_oneway:
     break;
     break;
-    
+
   case e_gras_msg_kind_rpccall:
   case e_gras_msg_kind_rpcanswer:
   case e_gras_msg_kind_rpcerror:
     gras_datadesc_recv(sock,ulong_type,r_arch, &msg->ID);
     break;
   case e_gras_msg_kind_rpccall:
   case e_gras_msg_kind_rpcanswer:
   case e_gras_msg_kind_rpcerror:
     gras_datadesc_recv(sock,ulong_type,r_arch, &msg->ID);
     break;
-    
+
   default:
     THROW_IMPOSSIBLE;
   }
   default:
     THROW_IMPOSSIBLE;
   }
@@ -137,13 +137,17 @@ gras_msg_recv(gras_socket_t    sock,
   gras_datadesc_recv(sock, string_type, r_arch, &msg_name);
   DEBUG4("Handle an incoming message '%s' (%s) using protocol %d (remote is %s)",
         msg_name, e_gras_msg_kind_names[msg->kind], (int)header[4],gras_datadesc_arch_name(r_arch));
   gras_datadesc_recv(sock, string_type, r_arch, &msg_name);
   DEBUG4("Handle an incoming message '%s' (%s) using protocol %d (remote is %s)",
         msg_name, e_gras_msg_kind_names[msg->kind], (int)header[4],gras_datadesc_arch_name(r_arch));
-   
+
   TRY {
     msg->type = (gras_msgtype_t)xbt_set_get_by_name(_gras_msgtype_set,msg_name);
   } CATCH(e) {
     /* FIXME: Survive unknown messages */
   TRY {
     msg->type = (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);
+       if (e.category == not_found_error) {
+               xbt_ex_free(e);
+           THROW1(not_found_error,0, "Received an unknown message: %s (FIXME: should survive to these)", msg_name);
+       } else
+               RETHROW1("Exception caught while retrieving the type associated to messages '%s' : %s",
+                               msg_name);
   }
   free(msg_name);
 
   }
   free(msg_name);