Optimized zmq::dish_t::xrecv

This commit is contained in:
Simon Giesecke
2018-08-07 13:57:07 +02:00
parent fa976f87f9
commit aa1f5739b7

View File

@@ -178,28 +178,27 @@ int zmq::dish_t::xrecv (msg_t *msg_)
// If there's already a message prepared by a previous call to zmq_poll,
// return it straight ahead.
if (_has_message) {
int rc = msg_->move (_message);
const int rc = msg_->move (_message);
errno_assert (rc == 0);
_has_message = false;
return 0;
}
while (true) {
do {
// Get a message using fair queueing algorithm.
int rc = _fq.recv (msg_);
const int rc = _fq.recv (msg_);
// If there's no message available, return immediately.
// The same when error occurs.
if (rc != 0)
return -1;
// Filtering non matching messages
subscriptions_t::iterator it =
_subscriptions.find (std::string (msg_->group ()));
if (it != _subscriptions.end ())
// Skip non matching messages
} while (0 == _subscriptions.count (std::string (msg_->group ())));
// Found a matching message
return 0;
}
}
bool zmq::dish_t::xhas_in ()
{