[wpinet] uv: Stop creating handles when closing loop (#5102)

This prevents EventLoopRunner::Stop() from hanging in the case when
new handles are created after the async walk closes all the handles.
This commit is contained in:
Peter Johnson
2023-02-16 22:49:14 -08:00
committed by GitHub
parent 805c837a42
commit 8068369542
29 changed files with 300 additions and 82 deletions

View File

@@ -9,6 +9,9 @@
namespace wpi::uv {
std::shared_ptr<Timer> Timer::Create(Loop& loop) {
if (loop.IsClosing()) {
return nullptr;
}
auto h = std::make_shared<Timer>(private_init{});
int err = uv_timer_init(loop.GetRaw(), h->GetRaw());
if (err < 0) {
@@ -32,6 +35,9 @@ void Timer::SingleShot(Loop& loop, Time timeout, std::function<void()> func) {
}
void Timer::Start(Time timeout, Time repeat) {
if (IsLoopClosing()) {
return;
}
Invoke(
&uv_timer_start, GetRaw(),
[](uv_timer_t* handle) {