CConsumeStatus ConsumerAckInner::WaitResult()

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;
}