in src/consumer_ack_inner.cpp [53:75]
CConsumeStatus ConsumerAckInner::WaitResult()
{
uv_mutex_lock(&mutex);
// if `cond signal` send before `WaitResult()`,
// `uv_cond_wait` will be blocked and never continue
//
// so we have to return result directly without `uv_cond_wait`
if(acked)
{
CConsumeStatus _status = status;
uv_mutex_unlock(&mutex);
return _status;
}
// wait for `this->Ack()` and that will emit `uv_cond_signal` to let it stop wait
uv_cond_wait(&cond, &mutex);
CConsumeStatus _status = status;
uv_mutex_unlock(&mutex);
return _status;
}