A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
play with (parallel) execs. still not satisfying
[simgrid.git]
/
src
/
s4u
/
s4u_Mailbox.cpp
diff --git
a/src/s4u/s4u_Mailbox.cpp
b/src/s4u/s4u_Mailbox.cpp
index
0170e6f
..
52a0874
100644
(file)
--- a/
src/s4u/s4u_Mailbox.cpp
+++ b/
src/s4u/s4u_Mailbox.cpp
@@
-1,4
+1,4
@@
-/* Copyright (c) 2006-201
8
. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2006-201
9
. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
@@
-6,6
+6,7
@@
#include "simgrid/s4u/Comm.hpp"
#include "simgrid/s4u/Mailbox.hpp"
#include "src/kernel/activity/MailboxImpl.hpp"
#include "simgrid/s4u/Comm.hpp"
#include "simgrid/s4u/Mailbox.hpp"
#include "src/kernel/activity/MailboxImpl.hpp"
+
#include <simgrid/mailbox.h>
XBT_LOG_EXTERNAL_CATEGORY(s4u);
#include <simgrid/mailbox.h>
XBT_LOG_EXTERNAL_CATEGORY(s4u);
@@
-24,46
+25,53
@@
const char* Mailbox::get_cname() const
return pimpl_->get_cname();
}
return pimpl_->get_cname();
}
-MailboxPtr Mailbox::by_name(const
char*
name)
+MailboxPtr Mailbox::by_name(const
std::string&
name)
{
{
- kernel::activity::MailboxImpl* mbox = kernel::activity::MailboxImpl::by
NameOrN
ull(name);
+ kernel::activity::MailboxImpl* mbox = kernel::activity::MailboxImpl::by
_name_or_n
ull(name);
if (mbox == nullptr) {
if (mbox == nullptr) {
- mbox = simix::simcall([name] { return kernel::activity::MailboxImpl::by
NameOrC
reate(name); });
+ mbox = simix::simcall([name] { return kernel::activity::MailboxImpl::by
_name_or_c
reate(name); });
}
return MailboxPtr(&mbox->piface_, true);
}
}
return MailboxPtr(&mbox->piface_, true);
}
-
MailboxPtr Mailbox::by_name(std::string name
)
+
bool Mailbox::empty(
)
{
{
- return
by_name(name.c_str()
);
+ return
pimpl_->comm_queue_.empty(
);
}
}
-bool Mailbox::
empty
()
+bool Mailbox::
listen
()
{
{
- return
pimpl_->comm_queue.empty(
);
+ return
not this->empty() || (pimpl_->permanent_receiver_ && not pimpl_->done_comm_queue_.empty()
);
}
}
-bool Mailbox::
listen
()
+bool Mailbox::
ready
()
{
{
- return not this->empty() || (pimpl_->permanent_receiver && not pimpl_->done_comm_queue.empty());
+ bool comm_ready = false;
+ if (not pimpl_->comm_queue_.empty()) {
+ comm_ready = pimpl_->comm_queue_.front()->state_ == SIMIX_DONE;
+
+ } else if (pimpl_->permanent_receiver_ && not pimpl_->done_comm_queue_.empty()) {
+ comm_ready = pimpl_->done_comm_queue_.front()->state_ == SIMIX_DONE;
+ }
+ return comm_ready;
}
}
-
smx_activity_t
Mailbox::front()
+
kernel::activity::CommImplPtr
Mailbox::front()
{
{
- return pimpl_->comm_queue
.empty() ? nullptr : pimpl_->comm_queue
.front();
+ return pimpl_->comm_queue
_.empty() ? nullptr : pimpl_->comm_queue_
.front();
}
void Mailbox::set_receiver(ActorPtr actor)
{
}
void Mailbox::set_receiver(ActorPtr actor)
{
- simix::simcall([this, actor]() { this->pimpl_->set
R
eceiver(actor); });
+ simix::simcall([this, actor]() { this->pimpl_->set
_r
eceiver(actor); });
}
/** @brief get the receiver (process associated to the mailbox) */
ActorPtr Mailbox::get_receiver()
{
}
/** @brief get the receiver (process associated to the mailbox) */
ActorPtr Mailbox::get_receiver()
{
- if (pimpl_->permanent_receiver == nullptr)
+ if (pimpl_->permanent_receiver
_
== nullptr)
return ActorPtr();
return ActorPtr();
- return pimpl_->permanent_receiver->iface();
+ return pimpl_->permanent_receiver
_
->iface();
}
CommPtr Mailbox::put_init()
}
CommPtr Mailbox::put_init()
@@
-107,7
+115,7
@@
void Mailbox::put(void* payload, uint64_t simulated_size_in_bytes, double timeou
c->set_remaining(simulated_size_in_bytes);
c->set_src_data(payload);
// c->start() is optional.
c->set_remaining(simulated_size_in_bytes);
c->set_src_data(payload);
// c->start() is optional.
- c->wait(timeout);
+ c->wait
_for
(timeout);
}
s4u::CommPtr Mailbox::get_init()
}
s4u::CommPtr Mailbox::get_init()
@@
-138,20
+146,25
@@
void* Mailbox::get(double timeout)
void* res = nullptr;
CommPtr c = get_init();
c->set_dst_data(&res, sizeof(res));
void* res = nullptr;
CommPtr c = get_init();
c->set_dst_data(&res, sizeof(res));
- c->wait(timeout);
+ c->wait
_for
(timeout);
return res;
}
return res;
}
+
+smx_activity_t Mailbox::iprobe(int type, int (*match_fun)(void*, void*, kernel::activity::CommImpl*), void* data)
+{
+ return simix::simcall([this, type, match_fun, data] { return pimpl_->iprobe(type, match_fun, data); });
+}
} // namespace s4u
} // namespace simgrid
/* **************************** Public C interface *************************** */
} // namespace s4u
} // namespace simgrid
/* **************************** Public C interface *************************** */
-/**
\
brief Set the mailbox to receive in asynchronous mode
+/**
@
brief Set the mailbox to receive in asynchronous mode
*
* All messages sent to this mailbox will be transferred to the receiver without waiting for the receive call.
* The receive call will still be necessary to use the received data.
* If there is a need to receive some messages asynchronously, and some not, two different mailboxes should be used.
*
*
* All messages sent to this mailbox will be transferred to the receiver without waiting for the receive call.
* The receive call will still be necessary to use the received data.
* If there is a need to receive some messages asynchronously, and some not, two different mailboxes should be used.
*
- *
\
param alias The name of the mailbox
+ *
@
param alias The name of the mailbox
*/
void sg_mailbox_set_receiver(const char* alias)
{
*/
void sg_mailbox_set_receiver(const char* alias)
{
@@
-159,10
+172,10
@@
void sg_mailbox_set_receiver(const char* alias)
XBT_VERB("%s mailbox set to receive eagerly for myself\n", alias);
}
XBT_VERB("%s mailbox set to receive eagerly for myself\n", alias);
}
-/**
\
brief Check if there is a communication going on in a mailbox.
+/**
@
brief Check if there is a communication going on in a mailbox.
*
*
- *
\
param alias the name of the mailbox to be considered
- *
\
return Returns 1 if there is a communication, 0 otherwise
+ *
@
param alias the name of the mailbox to be considered
+ *
@
return Returns 1 if there is a communication, 0 otherwise
*/
int sg_mailbox_listen(const char* alias)
{
*/
int sg_mailbox_listen(const char* alias)
{