From e88c2c923c467dbe27ae7fb7e04cc88a848d2e31 Mon Sep 17 00:00:00 2001 From: mquinson Date: Tue, 10 Mar 2009 15:02:32 +0000 Subject: [PATCH] be more explicit when we die because we got an unknown message type (plus eclipse reindenting, sorry) 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 | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/gras/Msg/rl_msg.c b/src/gras/Msg/rl_msg.c index 09c4b7340f..148661df16 100644 --- a/src/gras/Msg/rl_msg.c +++ b/src/gras/Msg/rl_msg.c @@ -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; - + 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); } - 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) { - case e_gras_msg_kind_oneway: + case e_gras_msg_kind_oneway: break; - + 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); } - + 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); } - + 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, @@ -90,7 +90,7 @@ gras_msg_recv(gras_socket_t sock, 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"); @@ -101,7 +101,7 @@ gras_msg_recv(gras_socket_t sock, xbt_assert(ulong_type); } - + 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); - 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) { - case e_gras_msg_kind_oneway: + case e_gras_msg_kind_oneway: 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; } @@ -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)); - + 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); -- 2.20.1