summaryrefslogtreecommitdiff
path: root/lib/element_impl.hpp
diff options
context:
space:
mode:
authorJosh Blum2013-04-10 02:57:11 -0500
committerJosh Blum2013-04-10 02:57:57 -0500
commit50f8123fc082ff9b1666277175e6f79f666404e5 (patch)
tree54ddb4d742c2f03fb083e5353db02767b4828c29 /lib/element_impl.hpp
parentfb55fd6737902ed6270c2518bdc81a6971f9b3a1 (diff)
downloadsandhi-50f8123fc082ff9b1666277175e6f79f666404e5.tar.gz
sandhi-50f8123fc082ff9b1666277175e6f79f666404e5.tar.bz2
sandhi-50f8123fc082ff9b1666277175e6f79f666404e5.zip
gras: switched to using token for prio messages
See #70 for more details
Diffstat (limited to 'lib/element_impl.hpp')
-rw-r--r--lib/element_impl.hpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/element_impl.hpp b/lib/element_impl.hpp
index 3148d93..727e756 100644
--- a/lib/element_impl.hpp
+++ b/lib/element_impl.hpp
@@ -51,12 +51,20 @@ struct ElementImpl
return topology.get();
}
- //call this before sending a high prio message to all workers
- void pre_post_all_set_prio(void)
+ template <typename MessageType>
+ void bcast_prio_msg(const MessageType &msg)
{
+ Theron::Receiver receiver;
BOOST_FOREACH(Apology::Worker *worker, this->executor->get_workers())
{
- dynamic_cast<BlockActor *>(worker)->highPrioPreNotify();
+ MessageType message = msg;
+ message.prio_token = dynamic_cast<BlockActor *>(worker)->prio_token;
+ worker->Push(message, receiver.GetAddress());
+ }
+ size_t outstandingCount(this->executor->get_workers().size());
+ while (outstandingCount != 0)
+ {
+ outstandingCount -= receiver.Wait(outstandingCount);
}
}