diff options
author | Josh Blum | 2013-04-10 02:57:11 -0500 |
---|---|---|
committer | Josh Blum | 2013-04-10 02:57:57 -0500 |
commit | 50f8123fc082ff9b1666277175e6f79f666404e5 (patch) | |
tree | 54ddb4d742c2f03fb083e5353db02767b4828c29 /lib/element_impl.hpp | |
parent | fb55fd6737902ed6270c2518bdc81a6971f9b3a1 (diff) | |
download | sandhi-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.hpp | 14 |
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); } } |