From 869d334ebacf2ffaf6501449aa314783e812bf85 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 23 Aug 2024 09:21:38 +0200 Subject: [PATCH] Lua: Avoid potential leak Fix the warning about potential leak of connection objects. Use single shot connections and disconnect other connections explicitly. Change-Id: I5fbf55ac04a164a1bf42e2e27e8271ccf1385fbd Reviewed-by: Marcus Tillmanns --- src/plugins/lua/bindings/localsocket.cpp | 50 ++++++++---------------- 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/src/plugins/lua/bindings/localsocket.cpp b/src/plugins/lua/bindings/localsocket.cpp index 94a29b31832..bb4215a5553 100644 --- a/src/plugins/lua/bindings/localsocket.cpp +++ b/src/plugins/lua/bindings/localsocket.cpp @@ -40,32 +40,18 @@ void setupLocalSocketModule() if (socket->state() != QLocalSocket::UnconnectedState) throw sol::error("socket is not in UnconnectedState"); - auto connection = new QMetaObject::Connection; - auto connectionError = new QMetaObject::Connection; - - *connection = QObject::connect( - socket, &QLocalSocket::connected, socket, [connectionError, connection, cb]() { - qDebug() << "CONNECTED"; - auto res = void_safe_call(cb, true); - QTC_CHECK_EXPECTED(res); - QObject::disconnect(*connection); - delete connection; - QObject::disconnect(*connectionError); - delete connectionError; - }); - *connectionError = QObject::connect( - socket, - &QLocalSocket::errorOccurred, - socket, - [socket, connection, connectionError, cb]() { - qDebug() << "CONNECT ERROR"; - auto res = void_safe_call(cb, false, socket->errorString()); - QTC_CHECK_EXPECTED(res); - QObject::disconnect(*connection); - delete connection; - QObject::disconnect(*connectionError); - delete connectionError; - }); + QObject::connect(socket, &QLocalSocket::connected, socket, [socket, cb] { + qDebug() << "CONNECTED"; + auto res = void_safe_call(cb, true); + QTC_CHECK_EXPECTED(res); + QObject::disconnect(socket, &QLocalSocket::errorOccurred, socket, nullptr); + }, Qt::SingleShotConnection); + QObject::connect(socket, &QLocalSocket::errorOccurred, socket, [socket, cb] { + qDebug() << "CONNECT ERROR"; + auto res = void_safe_call(cb, false, socket->errorString()); + QTC_CHECK_EXPECTED(res); + QObject::disconnect(socket, &QLocalSocket::connected, socket, nullptr); + }, Qt::SingleShotConnection); socket->connectToServer(); }; @@ -91,14 +77,10 @@ void setupLocalSocketModule() return; } - auto connection = new QMetaObject::Connection; - *connection = QObject::connect( - socket, &QLocalSocket::readyRead, socket, [connection, cb, socket]() { - auto res = void_safe_call(cb, socket->readAll().toStdString()); - QTC_CHECK_EXPECTED(res); - QObject::disconnect(*connection); - delete connection; - }); + QObject::connect(socket, &QLocalSocket::readyRead, socket, [socket, cb] { + auto res = void_safe_call(cb, socket->readAll().toStdString()); + QTC_CHECK_EXPECTED(res); + }, Qt::SingleShotConnection); }; socketType["read"] = wrap(socketType["read_cb"].get()).get();