Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Let's shild the user against himself: check that he provided a payload variable when...
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 29 May 2006 09:04:10 +0000 (09:04 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 29 May 2006 09:04:10 +0000 (09:04 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2300 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/gras/Msg/msg.c
src/gras/Msg/rpc.c

index 8ed2aef..a867919 100644 (file)
@@ -342,6 +342,16 @@ gras_msg_wait(double           timeout,
                    msgt_want, NULL,      NULL, NULL,
                    &msg);
 
+  if (msgt_want->ctn_type) {
+    xbt_assert1(payload,
+               "Message type '%s' convey a payload you must accept",
+               msgt_want->name);
+  } else {
+    xbt_assert1(!payload,
+               "No payload was declared for message type '%s'",
+               msgt_want->name);
+  }
+
   if (payload) {
     memcpy(payload,msg.payl,msg.payl_size);
     free(msg.payl);
@@ -359,6 +369,16 @@ gras_msg_send(gras_socket_t   sock,
              gras_msgtype_t  msgtype,
              void           *payload) {
 
+  if (msgtype->ctn_type) {
+    xbt_assert1(payload,
+               "Message type '%s' convey a payload you must provide",
+               msgtype->name);
+  } else {
+    xbt_assert1(!payload,
+               "No payload was declared for message type '%s'",
+               msgtype->name);
+  }
+
   gras_msg_send_ext(sock, e_gras_msg_kind_oneway,0, msgtype, payload);
 }
 
index 7156c37..79a0d12 100644 (file)
@@ -82,6 +82,16 @@ gras_msg_rpc_async_call(gras_socket_t server,
                        void *request) {
   gras_msg_cb_ctx_t ctx = xbt_new0(s_gras_msg_cb_ctx_t,1);
 
+  if (msgtype->ctn_type) {
+    xbt_assert1(request,
+               "RPC type '%s' convey a payload you must provide",
+               msgtype->name);
+  } else {
+    xbt_assert1(!request,
+               "No payload was declared for RPC type '%s'",
+               msgtype->name);
+  }
+
   ctx->ID = last_msg_ID++;
   ctx->expeditor = server;
   ctx->msgtype=msgtype;
@@ -103,6 +113,16 @@ void gras_msg_rpc_async_wait(gras_msg_cb_ctx_t ctx,
                             void *answer) {
   s_gras_msg_t received;
 
+  if (ctx->msgtype->answer_type) {
+    xbt_assert1(answer,
+               "Answers to RPC '%s' convey a payload you must accept",
+               ctx->msgtype->name);
+  } else {
+    xbt_assert1(!answer,
+               "No payload was declared for answers to RPC '%s'",
+               ctx->msgtype->name);
+  }
+
   gras_msg_wait_ext(ctx->timeout,
                    ctx->msgtype, NULL, msgfilter_rpcID, &ctx->ID,
                    &received);