Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Don't read a comm after completion since it is auto-destroyed now.
authorthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 1 Feb 2011 12:53:00 +0000 (12:53 +0000)
committerthiery <thiery@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 1 Feb 2011 12:53:00 +0000 (12:53 +0000)
This fixes the tests that were broken by r9538.

git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9552 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/gras/Msg/sg_msg.c
src/gras/Transport/transport_plugin_sg.c
src/gras/Virtu/virtu_sg.h
src/simix/smx_network.c
src/simix/smx_user.c
src/smpi/smpi_base.c

index 06bebc5..7da6665 100644 (file)
@@ -103,7 +103,6 @@ gras_msg_t gras_msg_recv_any(void)
   xbt_dynar_t comms = xbt_dynar_new(sizeof(smx_action_t), NULL);
   unsigned int cursor = 0;
   int got = 0;
   xbt_dynar_t comms = xbt_dynar_new(sizeof(smx_action_t), NULL);
   unsigned int cursor = 0;
   int got = 0;
-  smx_action_t comm = NULL;
   gras_socket_t sock = NULL;
   gras_trp_sg_sock_data_t sock_data;
   xbt_dynar_foreach(trp_proc->sockets, cursor, sock) {
   gras_socket_t sock = NULL;
   gras_trp_sg_sock_data_t sock_data;
   xbt_dynar_foreach(trp_proc->sockets, cursor, sock) {
@@ -165,13 +164,11 @@ gras_msg_t gras_msg_recv_any(void)
   got = SIMIX_req_comm_waitany(comms);
 
   /* retrieve the message sent in that communication */
   got = SIMIX_req_comm_waitany(comms);
 
   /* retrieve the message sent in that communication */
-  xbt_dynar_get_cpy(comms, got, &(comm));
-  msg = SIMIX_req_comm_get_src_data(comm);
   sock = xbt_dynar_get_as(trp_proc->sockets, got, gras_socket_t);
   sock_data = (gras_trp_sg_sock_data_t) sock->data;
   sock = xbt_dynar_get_as(trp_proc->sockets, got, gras_socket_t);
   sock_data = (gras_trp_sg_sock_data_t) sock->data;
-  VERB3("Got something. Communication %p's over rdv_server=%p, rdv_client=%p",
-      comm,sock_data->rdv_server,sock_data->rdv_client);
-  SIMIX_req_comm_destroy(comm);
+  msg = sock_data->msg;
+  VERB2("Got something. Communication over rdv_server=%p, rdv_client=%p",
+      sock_data->rdv_server,sock_data->rdv_client);
 
   /* Reinstall a waiting communication on that rdv */
 /*  xbt_dynar_foreach(trp_proc->sockets,cursor,sock) {
 
   /* Reinstall a waiting communication on that rdv */
 /*  xbt_dynar_foreach(trp_proc->sockets,cursor,sock) {
@@ -183,7 +180,7 @@ gras_msg_t gras_msg_recv_any(void)
   sock_data->comm_recv =
       SIMIX_req_comm_irecv(gras_socket_im_the_server(sock) ?
                           sock_data->rdv_server : sock_data->rdv_client,
   sock_data->comm_recv =
       SIMIX_req_comm_irecv(gras_socket_im_the_server(sock) ?
                           sock_data->rdv_server : sock_data->rdv_client,
-                          NULL, 0, NULL, NULL);
+                          &sock_data->msg, NULL, NULL, NULL);
 
   return msg;
 }
 
   return msg;
 }
@@ -241,7 +238,7 @@ void gras_msg_send_ext(gras_socket_t sock,
                                                 payload, msg->payl);
   }
 
                                                 payload, msg->payl);
   }
 
-  comm = SIMIX_req_comm_isend(target_rdv, whole_payload_size, -1, &msg, sizeof(void *), NULL, msg, 0);
+  comm = SIMIX_req_comm_isend(target_rdv, whole_payload_size, -1, msg, sizeof(void *), NULL, msg, 0);
   SIMIX_req_comm_wait(comm, -1);
 
   VERB0("Message sent (and received)");
   SIMIX_req_comm_wait(comm, -1);
 
   VERB0("Message sent (and received)");
index 05590a6..8debb38 100644 (file)
@@ -180,7 +180,7 @@ void gras_trp_sg_socket_client(gras_trp_plugin_t self,
   /* initialize synchronization stuff on the socket */
   data->rdv_server = pr->rdv;
   data->rdv_client = SIMIX_req_rdv_create(NULL);
   /* initialize synchronization stuff on the socket */
   data->rdv_server = pr->rdv;
   data->rdv_client = SIMIX_req_rdv_create(NULL);
-  data->comm_recv = SIMIX_req_comm_irecv(data->rdv_client, NULL, 0, NULL, NULL);
+  data->comm_recv = SIMIX_req_comm_irecv(data->rdv_client, &data->msg, NULL, NULL, NULL);
 
   /* connect that simulation data to the socket */
   sock->data = data;
 
   /* connect that simulation data to the socket */
   sock->data = data;
@@ -227,7 +227,7 @@ void gras_trp_sg_socket_server(gras_trp_plugin_t self, int port, gras_socket_t s
   data->client = NULL;
   data->rdv_server = pr->rdv;
   data->rdv_client = NULL;
   data->client = NULL;
   data->rdv_server = pr->rdv;
   data->rdv_client = NULL;
-  data->comm_recv = SIMIX_req_comm_irecv(pr->rdv, NULL, 0, NULL, NULL);
+  data->comm_recv = SIMIX_req_comm_irecv(pr->rdv, &data->msg, NULL, NULL, NULL);
 
   sock->data = data;
 
 
   sock->data = data;
 
index 70f7c10..b634604 100644 (file)
@@ -36,7 +36,8 @@ typedef struct {
 
   smx_rdv_t rdv_server;         /* The rendez-vous point to use */
   smx_rdv_t rdv_client;         /* The rendez-vous point to use */
 
   smx_rdv_t rdv_server;         /* The rendez-vous point to use */
   smx_rdv_t rdv_client;         /* The rendez-vous point to use */
-  smx_action_t comm_recv;         /* The comm of irecv on receiver side */
+  smx_action_t comm_recv;       /* The comm of irecv on receiver side */
+  gras_msg_t msg;               /* The destination buffer of the comm data */
 
   int server_port;
   int client_port;
 
   int server_port;
   int client_port;
index a5868d1..7732d2a 100644 (file)
@@ -22,7 +22,7 @@ static smx_action_t SIMIX_comm_new(e_smx_comm_type_t type);
 static XBT_INLINE void SIMIX_rdv_push(smx_rdv_t rdv, smx_action_t comm);
 static XBT_INLINE void SIMIX_rdv_remove(smx_rdv_t rdv, smx_action_t comm);
 static smx_action_t SIMIX_rdv_get_request(smx_rdv_t rdv, e_smx_comm_type_t type,
 static XBT_INLINE void SIMIX_rdv_push(smx_rdv_t rdv, smx_action_t comm);
 static XBT_INLINE void SIMIX_rdv_remove(smx_rdv_t rdv, smx_action_t comm);
 static smx_action_t SIMIX_rdv_get_request(smx_rdv_t rdv, e_smx_comm_type_t type,
-                                                                                 int (*match_fun)(void *, void *), void *);
+                                         int (*match_fun)(void *, void *), void *);
 static void SIMIX_rdv_free(void *data);
 
 void SIMIX_network_init(void)
 static void SIMIX_rdv_free(void *data);
 
 void SIMIX_network_init(void)
@@ -271,7 +271,7 @@ smx_action_t SIMIX_comm_isend(smx_process_t src_proc, smx_rdv_t rdv,
 
   /* If the communication action is detached then decrease the refcount
    * by one, so it will be eliminated by the receivers destroy call */
 
   /* If the communication action is detached then decrease the refcount
    * by one, so it will be eliminated by the receivers destroy call */
-  if(detached){
+  if (detached) {
     action->comm.detached = 1;
     action->comm.refcount--;
   }
     action->comm.detached = 1;
     action->comm.refcount--;
   }
index 3096246..aff9f7f 100644 (file)
@@ -661,13 +661,17 @@ void SIMIX_req_comm_destroy(smx_action_t comm)
 {
   xbt_assert0(comm, "Invalid parameter");
 
 {
   xbt_assert0(comm, "Invalid parameter");
 
-  /* FIXME remove this request type (auto-destroy finished comms) */
+  /* FIXME remove this request type: comms are auto-destroyed now,
+   * but what happens with unfinished comms? */
+
+  /*
   smx_req_t req = SIMIX_req_mine();
 
   req->call = REQ_COMM_DESTROY;
   req->comm_destroy.comm = comm;
 
   SIMIX_request_push();
   smx_req_t req = SIMIX_req_mine();
 
   req->call = REQ_COMM_DESTROY;
   req->comm_destroy.comm = comm;
 
   SIMIX_request_push();
+  */
 }
 
 void SIMIX_req_comm_cancel(smx_action_t comm)
 }
 
 void SIMIX_req_comm_cancel(smx_action_t comm)
index 8bb4d4f..bd20848 100644 (file)
@@ -212,9 +212,8 @@ static void finish_wait(MPI_Request * request, MPI_Status * status)
     status->MPI_SOURCE = req->src;
     status->MPI_TAG = req->tag;
     status->MPI_ERROR = MPI_SUCCESS;
     status->MPI_SOURCE = req->src;
     status->MPI_TAG = req->tag;
     status->MPI_ERROR = MPI_SUCCESS;
-    status->count = SIMIX_req_comm_get_dst_buff_size(req->action);
+    status->count = req->size;
   }
   }
-  SIMIX_req_comm_destroy(req->action);
   print_request("Finishing", req);
   if(req->flags & NON_PERSISTENT) {
     smpi_mpi_request_free(request);
   print_request("Finishing", req);
   if(req->flags & NON_PERSISTENT) {
     smpi_mpi_request_free(request);