From 57be50ef266f7c2dc7c376c6faedf58e9707b775 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 4 May 2023 09:47:50 -0400 Subject: [PATCH] tls_session: cancel requests on destruction requests_ is passed as a shared_ptr in verifyCertificateWrapper. If the session is destroyed, the request will not be stopped and will not return any result. So we need to cancel it. Change-Id: If631a3c5409aea05136278d4ab7b1e2d0ae7c3cb --- src/connectivity/security/tls_session.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/connectivity/security/tls_session.cpp b/src/connectivity/security/tls_session.cpp index f783c91830..da2551556f 100644 --- a/src/connectivity/security/tls_session.cpp +++ b/src/connectivity/security/tls_session.cpp @@ -368,6 +368,14 @@ TlsSession::TlsSessionImpl::~TlsSessionImpl() state_ = TlsSessionState::SHUTDOWN; stateCondition_.notify_all(); rxCv_.notify_all(); + { + std::lock_guard<std::mutex> lock(requestsMtx_); + // requests_ store a shared_ptr, so we need to cancel requests + // to not be stuck in verifyCertificateWrapper + for (auto& request : requests_) + request->cancel(); + requests_.clear(); + } thread_.join(); if (not transport_->isReliable()) transport_->setOnRecv(nullptr); -- GitLab