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) {
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_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) {
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;
}
payload, msg->payl);
}
- comm = SIMIX_req_comm_isend(target_rdv, whole_payload_size, -1, &msg, sizeof(void *), NULL, msg);
+ 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)");