Skip to content

Conversation

@jbaldwin
Copy link
Owner

No description provided.

wence- and others added 2 commits November 26, 2025 09:09
To avoid lost wakeups, use an internal mutex to protect modification of the
awaiter list.

Now, while we are notifying, if another notification task arrives it must
wait for our modification of the awaiter list to complete. Hence waiters
that were not ready and are pushed back on the list have a chance to be
woken up by the next notification.

- Closes #398
waiter = waiter->m_next;
}

coro::task_group group{executor, std::move(notify_tasks)};
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this could possibly also just be a when_all(notify_tasks) but we'd need to refactor how make_notify_all_executor_individual_task() work internally to possibly take an executor and if it receives one to schedule itself.. which honestly is probably more efficient since it won't introduce the task_self_deleting as an intermediate, just a schedule co_await.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated with another patchset to show when_all usage, I think they are roughly equivalent, but when_all seems a little more appropriate since we actually do know the lifetime of the tasks, and task_group should be use for more dynamic lifetimes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants