From 146aaec129922595a6142435eaa2f8ffe4bef787 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Thu, 30 Sep 2021 12:26:03 +0330 Subject: [PATCH] RequestServer: Avoid storing a strong reference to a socket in callbacks Unused sockets created by EnsureConnection should not keep the socket around (storing a strong reference will create a reference cycle). This fixes a whole bunch more RS spins. --- Userland/Services/RequestServer/ClientConnection.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Userland/Services/RequestServer/ClientConnection.cpp b/Userland/Services/RequestServer/ClientConnection.cpp index b427eb3479..c703350349 100644 --- a/Userland/Services/RequestServer/ClientConnection.cpp +++ b/Userland/Services/RequestServer/ClientConnection.cpp @@ -144,17 +144,17 @@ void ClientConnection::ensure_connection(URL const& url, ::RequestServer::CacheL bool did_connect; if (is_tls) { tls_instance->set_root_certificates(DefaultRootCACertificates::the().certificates()); - tls_instance->on_tls_connected = [socket, url = m_url, tls_instance] { + tls_instance->on_tls_connected = [socket = socket.ptr(), url = m_url, tls_instance] { tls_instance->set_on_tls_ready_to_write([socket, url](auto&) { ConnectionCache::request_did_finish(url, socket); }); }; - tls_instance->on_tls_error = [socket, url = m_url](auto) { + tls_instance->on_tls_error = [socket = socket.ptr(), url = m_url](auto) { ConnectionCache::request_did_finish(url, socket); }; did_connect = tls_instance->connect(m_url.host(), m_url.port_or_default()); } else { - socket->on_connected = [socket, url = m_url]() mutable { + socket->on_connected = [socket = socket.ptr(), url = m_url]() mutable { ConnectionCache::request_did_finish(url, socket); }; did_connect = socket->connect(m_url.host(), m_url.port_or_default());