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