X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4dbb8aa24d54e0a4091b1f01017032702d0376f7..5623028f32d7821973a11d81306c72380859cb17:/src/s4u/s4u_comm.cpp?ds=sidebyside diff --git a/src/s4u/s4u_comm.cpp b/src/s4u/s4u_comm.cpp index 44f526e270..d26c4d6952 100644 --- a/src/s4u/s4u_comm.cpp +++ b/src/s4u/s4u_comm.cpp @@ -5,8 +5,8 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "xbt/log.h" -#include "msg/msg_private.h" -#include "msg/msg_mailbox.h" +#include "src/msg/msg_private.h" +#include "src/msg/msg_mailbox.h" #include "simgrid/s4u/comm.hpp" @@ -24,8 +24,9 @@ s4u::Comm &s4u::Comm::send_init(s4u::Actor *sender, s4u::Mailbox &chan) { return *res; } -s4u::Comm &s4u::Comm::recv_init(s4u::Mailbox &chan) { +s4u::Comm &s4u::Comm::recv_init(s4u::Actor *receiver, s4u::Mailbox &chan) { s4u::Comm *res = new s4u::Comm(); + res->p_receiver = receiver; res->p_mailbox = &chan; return *res; @@ -78,7 +79,7 @@ void s4u::Comm::start() { p_matchFunction, p_cleanFunction, p_copyDataFunction, p_userData, p_detached); } else if (p_dstBuff != NULL) { // Receiver side - p_inferior = simcall_comm_irecv(p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize, + p_inferior = simcall_comm_irecv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize, p_matchFunction, p_copyDataFunction, p_userData, p_rate); @@ -99,7 +100,7 @@ void s4u::Comm::wait() { p_matchFunction, p_copyDataFunction, p_userData, -1 /*timeout*/); } else { - simcall_comm_recv(p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize, + simcall_comm_recv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize, p_matchFunction, p_copyDataFunction, p_userData, -1/*timeout*/, p_rate); } @@ -122,7 +123,7 @@ void s4u::Comm::wait(double timeout) { p_matchFunction, p_copyDataFunction, p_userData, timeout); } else { // Receiver - simcall_comm_recv(p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize, + simcall_comm_recv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize, p_matchFunction, p_copyDataFunction, p_userData, timeout, p_rate); } @@ -140,3 +141,12 @@ s4u::Comm &s4u::Comm::send_async(s4u::Actor *sender, Mailbox &dest, void *data, return res; } +s4u::Comm &s4u::Comm::recv_async(s4u::Actor *receiver, Mailbox &dest, void **data) { + s4u::Comm &res = s4u::Comm::recv_init(receiver, dest); + + res.setDstData(data); + + res.start(); + return res; +} +