in core.c [1050:1077]
static void most_read_completion(struct mbo *mbo)
{
struct most_channel *c = mbo->context;
if (unlikely(c->is_poisoned || (mbo->status == MBO_E_CLOSE))) {
trash_mbo(mbo);
return;
}
if (mbo->status == MBO_E_INVAL) {
nq_hdm_mbo(mbo);
atomic_inc(&c->mbo_nq_level);
return;
}
if (atomic_sub_and_test(1, &c->mbo_nq_level))
c->is_starving = 1;
if (c->pipe0.refs && c->pipe0.comp->rx_completion &&
c->pipe0.comp->rx_completion(mbo) == 0)
return;
if (c->pipe1.refs && c->pipe1.comp->rx_completion &&
c->pipe1.comp->rx_completion(mbo) == 0)
return;
most_put_mbo(mbo);
}