From 8a70fd6e0cc77910dda2e50a7f8bbb864f26c0b9 Mon Sep 17 00:00:00 2001 From: thiery Date: Tue, 1 Feb 2011 12:53:00 +0000 Subject: [PATCH 1/1] Don't read a comm after completion since it is auto-destroyed now. 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 | 13 +++++-------- src/gras/Transport/transport_plugin_sg.c | 4 ++-- src/gras/Virtu/virtu_sg.h | 3 ++- src/simix/smx_network.c | 4 ++-- src/simix/smx_user.c | 6 +++++- src/smpi/smpi_base.c | 3 +-- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/gras/Msg/sg_msg.c b/src/gras/Msg/sg_msg.c index 06bebc5ca7..7da6665099 100644 --- a/src/gras/Msg/sg_msg.c +++ b/src/gras/Msg/sg_msg.c @@ -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; - 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) { @@ -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 */ - 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; - 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) { @@ -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, - NULL, 0, NULL, NULL); + &sock_data->msg, NULL, NULL, NULL); return msg; } @@ -241,7 +238,7 @@ void gras_msg_send_ext(gras_socket_t sock, 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)"); diff --git a/src/gras/Transport/transport_plugin_sg.c b/src/gras/Transport/transport_plugin_sg.c index 05590a6049..8debb38f1d 100644 --- a/src/gras/Transport/transport_plugin_sg.c +++ b/src/gras/Transport/transport_plugin_sg.c @@ -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); - 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; @@ -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->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; diff --git a/src/gras/Virtu/virtu_sg.h b/src/gras/Virtu/virtu_sg.h index 70f7c10f8d..b634604a2e 100644 --- a/src/gras/Virtu/virtu_sg.h +++ b/src/gras/Virtu/virtu_sg.h @@ -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_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; diff --git a/src/simix/smx_network.c b/src/simix/smx_network.c index a5868d1fdd..7732d2a5f5 100644 --- a/src/simix/smx_network.c +++ b/src/simix/smx_network.c @@ -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, - int (*match_fun)(void *, void *), void *); + int (*match_fun)(void *, void *), 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(detached){ + if (detached) { action->comm.detached = 1; action->comm.refcount--; } diff --git a/src/simix/smx_user.c b/src/simix/smx_user.c index 309624688c..aff9f7ff41 100644 --- a/src/simix/smx_user.c +++ b/src/simix/smx_user.c @@ -661,13 +661,17 @@ void SIMIX_req_comm_destroy(smx_action_t comm) { 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(); + */ } void SIMIX_req_comm_cancel(smx_action_t comm) diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index 8bb4d4f093..bd20848e95 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -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->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); -- 2.20.1