Created on 2024-09-05.00:00:00 last changed 2 months ago
Proposed resolution:
This wording is relative to N4988.
Modify [exec.run.loop.members] as indicated:
void run();-5- Preconditions: state is starting or finishing.
-6- Effects: Sets the state to running. Then, equivalent to:while (auto* op = pop-front()) { op->execute(); }-7- Remarks: When state changes, it does so without introducing data races.
From sender-receiver/issues #280:
The precondition on run_loop::run() is that the state is starting. Given that run_loop::finish() puts the loop in the finishing state, the implication is that one cannot call finish() before calling run(). However, in most cases sync_wait is calling finish() on its run_loop before calling run(), violating this precondition. sync_wait does the following:run_loop loop; auto op = connect(sndr, sync_wait_receiver{&loop}); start(op); loop.run();
If sndr completes synchronously, the sync_wait_receiver will call finish() on the loop before loop.run() is called, violating run's precondition.
History | |||
---|---|---|---|
Date | User | Action | Args |
2024-09-05 17:36:00 | admin | set | messages: + msg14359 |
2024-09-05 00:00:00 | admin | create |