X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e9869546955549027a1680253a3402d72f4d8e03..b900f986c5bef91b93279a28e3b1b6b402338051:/src/gras/Msg/msg.c diff --git a/src/gras/Msg/msg.c b/src/gras/Msg/msg.c index 777fcd0e97..50f3c771a4 100644 --- a/src/gras/Msg/msg.c +++ b/src/gras/Msg/msg.c @@ -43,6 +43,8 @@ static void gras_msg_procdata_free(void *data) { xbt_dynar_free(&( res->msg_queue )); xbt_dynar_free(&( res->cbl_list )); xbt_dynar_free(&( res->timers )); + + free(res); } /* @@ -139,10 +141,7 @@ gras_msgtype_declare_v(const char *name, xbt_error_t errcode; gras_msgtype_t msgtype; char *namev=make_namev(name,version); - - if (!payload) - WARN1("Message %s has NULL payload",name); - + errcode = xbt_set_get_by_name(_gras_msgtype_set, namev,(xbt_set_elm_t*)&msgtype); @@ -249,7 +248,7 @@ gras_msg_recv(gras_socket_t sock, TRY(gras_trp_chunk_recv(sock, header, 6)); for (cpt=0; cpt<4; cpt++) if (header[cpt] != GRAS_header[cpt]) - RAISE0(mismatch_error,"Incoming bytes do not look like a GRAS message"); + RAISE2(mismatch_error,"Incoming bytes do not look like a GRAS message (header='%.4s' not '%.4s')",header,GRAS_header); if (header[4] != GRAS_header[4]) RAISE2(mismatch_error,"GRAS protocol mismatch (got %d, use %d)", (int)header[4], (int)GRAS_header[4]); @@ -303,21 +302,22 @@ gras_msg_wait(double timeout, gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); int cpt; s_gras_msg_t msg; + gras_socket_t expeditor_res = NULL; - *expeditor = NULL; payload_got = NULL; if (!msgt_want) RAISE0(mismatch_error, "Cannot wait for the NULL message (did msgtype_by_name fail?)"); - VERB1("Waiting for message %s",msgt_want->name); + VERB1("Waiting for message '%s'",msgt_want->name); start = now = gras_os_time(); xbt_dynar_foreach(pd->msg_queue,cpt,msg){ if (msg.type->code == msgt_want->code) { - *expeditor = msg.expeditor; + if (expeditor) + *expeditor = msg.expeditor; memcpy(payload, msg.payload, msg.payload_size); free(msg.payload); xbt_dynar_cursor_rm(pd->msg_queue, &cpt); @@ -327,9 +327,11 @@ gras_msg_wait(double timeout, } while (1) { - TRY(gras_trp_select(timeout - now + start, expeditor)); - TRY(gras_msg_recv(*expeditor, &msgt_got, &payload_got, &payload_size_got)); + TRY(gras_trp_select(timeout - now + start, &expeditor_res)); + TRY(gras_msg_recv(expeditor_res, &msgt_got, &payload_got, &payload_size_got)); if (msgt_got->code == msgt_want->code) { + if (expeditor) + *expeditor=expeditor_res; memcpy(payload, payload_got, payload_size_got); free(payload_got); VERB0("Got waited message"); @@ -337,9 +339,9 @@ gras_msg_wait(double timeout, } /* not expected msg type. Queue it for later */ - msg.expeditor = *expeditor; - msg.type = msgt_got; - msg.payload = payload; + msg.expeditor = expeditor_res; + msg.type = msgt_got; + msg.payload = payload; msg.payload_size = payload_size_got; xbt_dynar_push(pd->msg_queue,&msg); @@ -483,7 +485,7 @@ gras_cb_register(gras_msgtype_t msgtype, gras_cblist_t *list=NULL; int cpt; - DEBUG2("Register %p as callback to %s",cb,msgtype->name); + DEBUG2("Register %p as callback to '%s'",cb,msgtype->name); /* search the list of cb for this message on this host (creating if NULL) */ xbt_dynar_foreach(pd->cbl_list,cpt,list) {