Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Avoid to actually malloc the chunk of data when exchanging measurement packets in...
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 4 Apr 2006 22:40:16 +0000 (22:40 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 4 Apr 2006 22:40:16 +0000 (22:40 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2083 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/gras/Transport/transport.c
src/gras/Transport/transport_plugin_sg.c

index f9107c5..a8d2052 100644 (file)
@@ -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;
 }
 
index 6998072..d90c36f 100644 (file)
@@ -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)