* 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"
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;
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);
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);
}
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);
}
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;
+}
+