From: mquinson Date: Tue, 4 Apr 2006 22:40:16 +0000 (+0000) Subject: Avoid to actually malloc the chunk of data when exchanging measurement packets in... X-Git-Tag: v3.3~3275 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/856060282bcef7e9f575fd1b2d33071afdd58502 Avoid to actually malloc the chunk of data when exchanging measurement packets in simulation mode git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2083 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/src/gras/Transport/transport.c b/src/gras/Transport/transport.c index f9107c5968..a8d20523bb 100644 --- a/src/gras/Transport/transport.c +++ b/src/gras/Transport/transport.c @@ -382,11 +382,14 @@ void gras_socket_meas_send(gras_socket_t peer, unsigned int timeout, unsigned long int exp_size, unsigned long int msg_size) { - char *chunk = xbt_malloc0(msg_size); + char *chunk=NULL; unsigned long int exp_sofar; XBT_IN; + if (gras_if_RL()) + chunk=xbt_malloc0(msg_size); + xbt_assert0(peer->meas,"Asked to send measurement data on a regular socket"); xbt_assert0(peer->outgoing,"Socket not suited for data send (was created with gras_socket_server(), not gras_socket_client())"); @@ -400,7 +403,8 @@ void gras_socket_meas_send(gras_socket_t peer, exp_sofar,exp_size,msg_size, gras_socket_peer_name(peer), gras_socket_peer_port(peer)); - free(chunk); + if (gras_if_RL()) + free(chunk); XBT_OUT; } @@ -415,11 +419,14 @@ void gras_socket_meas_recv(gras_socket_t peer, unsigned long int exp_size, unsigned long int msg_size){ - char *chunk = xbt_malloc(msg_size); + char *chunk=NULL; unsigned long int exp_sofar; XBT_IN; + if (gras_if_RL()) + chunk = xbt_malloc(msg_size); + xbt_assert0(peer->meas, "Asked to receive measurement data on a regular socket"); xbt_assert0(peer->incoming,"Socket not suited for data receive"); @@ -434,7 +441,8 @@ void gras_socket_meas_recv(gras_socket_t peer, exp_sofar,exp_size,msg_size, gras_socket_peer_name(peer), gras_socket_peer_port(peer)); - free(chunk); + if (gras_if_RL()) + free(chunk); XBT_OUT; } diff --git a/src/gras/Transport/transport_plugin_sg.c b/src/gras/Transport/transport_plugin_sg.c index 6998072929..d90c36f92b 100644 --- a/src/gras/Transport/transport_plugin_sg.c +++ b/src/gras/Transport/transport_plugin_sg.c @@ -258,9 +258,13 @@ void gras_trp_sg_chunk_send_raw(gras_socket_t sock, sprintf(name,"Chunk[%d]",count++); task_data=xbt_new(sg_task_data_t,1); - task_data->data=(void*)xbt_malloc(size); task_data->size = size; - memcpy(task_data->data,data,size); + if (data) { + task_data->data=(void*)xbt_malloc(size); + memcpy(task_data->data,data,size); + } else { + task_data->data = NULL; + } task=MSG_task_create(name,0,((double)size)/(1024.0*1024.0),task_data); @@ -286,7 +290,9 @@ int gras_trp_sg_chunk_recv(gras_socket_t sock, DEBUG4("recv chunk on %s -> %s:%d (size=%ld)", MSG_host_get_name(sock_data->to_host), MSG_host_get_name(MSG_host_self()), sock_data->to_chan, size); - if (MSG_task_get(&task, (sock->meas ? pd->measChan : pd->chan)) != MSG_OK) + if (MSG_task_get_with_time_out(&task, + (sock->meas ? pd->measChan : pd->chan), + 60) != MSG_OK) THROW0(system_error,0,"Error in MSG_task_get()"); DEBUG1("Got chuck %s",MSG_task_get_name(task)); @@ -297,8 +303,10 @@ int gras_trp_sg_chunk_recv(gras_socket_t sock, task_data->size, size, MSG_host_get_name(sock_data->to_host), MSG_host_get_name(MSG_host_self()), sock_data->to_chan); - memcpy(data,task_data->data,size); - free(task_data->data); + if (data) + memcpy(data,task_data->data,size); + if (task_data->data) + free(task_data->data); free(task_data); if (MSG_task_destroy(task) != MSG_OK)