From cae06bd15d1979c7dd126e37064dc638f9af59ab Mon Sep 17 00:00:00 2001 From: Janusz Sobczak Date: Wed, 26 Jul 2023 15:59:14 -0700 Subject: [PATCH] Close executors in BasePcpHandler::Shutdown The client can call DisconnectFromEndpointManager() explicitly before BasePcpHandler is shut down. In this case, th executors were not terminated inside BasePcpHandler::Shutdown() This caused use-after-free errors in BasePcpHandlerTest.IoError_RequestConnectionFails PiperOrigin-RevId: 551340708 --- connections/implementation/base_pcp_handler.cc | 2 +- connections/implementation/base_pcp_handler.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/connections/implementation/base_pcp_handler.cc b/connections/implementation/base_pcp_handler.cc index 38729c65..4188aa3a 100644 --- a/connections/implementation/base_pcp_handler.cc +++ b/connections/implementation/base_pcp_handler.cc @@ -84,7 +84,7 @@ BasePcpHandler::~BasePcpHandler() { } void BasePcpHandler::Shutdown() { - if (stop_) return; + if (closed_.Set(true)) return; NEARBY_LOGS(INFO) << "Initiating shutdown of BasePcpHandler(" << strategy_.GetName() << ")"; DisconnectFromEndpointManager(); diff --git a/connections/implementation/base_pcp_handler.h b/connections/implementation/base_pcp_handler.h index c149e360..de8248e9 100644 --- a/connections/implementation/base_pcp_handler.h +++ b/connections/implementation/base_pcp_handler.h @@ -609,6 +609,7 @@ class BasePcpHandler : public PcpHandler, Strategy strategy_{PcpToStrategy(pcp_)}; EncryptionRunner encryption_runner_; BwuManager* bwu_manager_; + AtomicBoolean closed_{false}; }; } // namespace connections