exec::start_now: request_stop() on the storage does not reach the senders
Maintainer antworten meist innerhalb von 1 Tag
Ein zugehöriger Pull Request wurde bereits gemerged.
- #2417 von @Nas01010101 — gemerged
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 25/100
Rechercherichtung
Read include/exec/async_scope.hpp around __nest_receiver::get_env and include/exec/start_now.hpp around __storage and __receiver to trace which stop token reaches the sender. Then inspect test/exec/async_scope/test_start_now.cpp and add coverage for calling storage.request_stop(); done means the test observes the sender stop instead of run. Pull request #2417 is already open for this issue.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
exec::start_now returns a storage object with request_stop() and get_token(), but a stop request on that object never reaches the started senders. request_stop() returns true and the senders keep running.
Reproducer
#include <stdexec/execution.hpp>
#include <exec/async_scope.hpp>
#include <exec/start_now.hpp>
#include <cstdio>
namespace ex = stdexec;
int main() {
ex::run_loop loop;
exec::async_scope scope;
bool ran = false;
bool stopped = false;
auto storage = exec::start_now(
scope,
ex::schedule(loop.get_scheduler())
| ex::then([&]() noexcept { ran = true; })
| ex::upon_stopped([&]() noexcept { stopped = true; }));
bool accepted = storage.request_stop();
loop.finish();
loop.run();
ex::sync_wait(scope.on_empty());
std::printf("request_stop=%d ran=%d stopped=%d\n", accepted, ran, stopped);
}
Expected: request_stop=1 ran=0 stopped=1
Actual: request_stop=1 ran=1 stopped=0
Tested on main at 081ab7fc with clang 21.1.8 and g++ 14. Calling scope.request_stop() instead of storage.request_stop() does stop the sender, so the run loop's scheduler honors stop requests in this program.
Cause
__storage puts its own token in the environment of __receiver, and then wraps each sender with __scope.nest(...). __nest_receiver::get_env in include/exec/async_scope.hpp overrides get_stop_token with the scope's token, so the sender only ever sees the scope's token. The token from __storage::get_token() compares unequal to the one the sender reads.
test/exec/async_scope/test_start_now.cpp has no test that calls request_stop().
- Vorherrschende Sprache
- C++
- Sterne
- 2.5k
- Forks
- 284
- Ø Merge
- 1 T. 21 Std.
- Gemergte PRs (30 T.)
- 92
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus NVIDIA/stdexec
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
NVIDIA/stdexec#1751 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 1-2 Tage Anfängerfreundlichkeit 45/100
NVIDIA/stdexec#2415 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 25/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 Über eine Woche Anfängerfreundlichkeit 18/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 18/100
NVIDIA/stdexec#2402 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Ähnliche Issues
-
libc++ test-suite
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
llvm/llvm-project#239851 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug :bug:
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
comp-documentation
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 84/100
ClickHouse/ClickHouse#129829 ·
Maintainer antworten meist innerhalb von 1 Tag
-
feature request Python
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 2 Tagen