From 769aaa53c39190fbfd6cfb223f17bb9f9cf9d3e6 Mon Sep 17 00:00:00 2001 From: Zgrams <172541422+ZihaoFU245@users.noreply.github.com> Date: Sun, 6 Sep 2026 03:35:08 +0200 Subject: [PATCH] Fix insufficient resources error handling (#819) When naive DoAccept failed on ERR_INSUFFICIENT_RESOURCES, rv is passed to DoAcceptComplete, if rv is not OK, this function sets next state to DoAccept again, when naive reaches system wide file discriptor limits, and a pending CONNECT in queue, naive will be trapped in an infinite busy spinning loop and can not recover as resources are not reclaimed. --- src/net/tools/naive/naive_proxy.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/net/tools/naive/naive_proxy.cc b/src/net/tools/naive/naive_proxy.cc index a8a26e084b..2f96bde314 100644 --- a/src/net/tools/naive/naive_proxy.cc +++ b/src/net/tools/naive/naive_proxy.cc @@ -145,7 +145,14 @@ int NaiveProxy::DoAcceptComplete(int result) { if (result != OK) { next_state_ = State::kAccept; LOG(ERROR) << "Accept error: " << ErrorToShortString(result); - // This accept error is ignored to start the next accept. + if (result == ERR_INSUFFICIENT_RESOURCES) { + base::SingleThreadTaskRunner::GetCurrentDefault()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&NaiveProxy::OnIOComplete, + weak_ptr_factory_.GetWeakPtr(), OK), + base::Seconds(1)); + return ERR_IO_PENDING; + } return OK; }