lewissbaker / cppcoro

A library of C++ coroutine abstractions for the coroutines TS
MIT License
3.36k stars 462 forks source link

Split list of awaiters in multi_producer_sequencer::add_awaiter #217

Open dvetutnev opened 1 year ago

dvetutnev commented 1 year ago
while (awaiters != nullptr)
{
    diff_t diff = TRAITS::difference(targetSequence, lastKnownPublished);
    if (diff > 0)
    {
        // Not yet ready.
        minDiff = diff < minDiff ? diff : minDiff;
        *awaitersToEnqueueTail = awaiters;
        awaitersToEnqueueTail = &awaiters->m_next;
        awaiters->m_lastKnownPublished = lastKnownPublished;
    }
    else
    {
        // Now ready.
        *awaitersToResumeTail = awaiters;
        awaitersToResumeTail = &awaiters->m_next;
    }
    awaiters = awaiters->m_next;
}

Maybe on line should be awaiters->m_targetSequence instead targetSequence?