[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

@@ -13,6 +13,9 @@ WorkReq::WorkReq() {
}
void QueueWork(Loop& loop, const std::shared_ptr<WorkReq>& req) {
if (loop.IsClosing()) {
return;
}
int err = uv_queue_work(
loop.GetRaw(), req->GetRaw(),
[](uv_work_t* req) {
@@ -37,6 +40,9 @@ void QueueWork(Loop& loop, const std::shared_ptr<WorkReq>& req) {
void QueueWork(Loop& loop, std::function<void()> work,
std::function<void()> afterWork) {
if (loop.IsClosing()) {
return;
}
auto req = std::make_shared<WorkReq>();
if (work) {
req->work.connect(std::move(work));