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 <marcus.tillmanns@qt.io>
This commit is contained in:
Jarek Kobus
2024-08-23 09:21:38 +02:00
parent 4740ecfecf
commit 869d334eba

View File

@@ -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]() {
QObject::connect(socket, &QLocalSocket::connected, socket, [socket, 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]() {
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(*connection);
delete connection;
QObject::disconnect(*connectionError);
delete connectionError;
});
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]() {
QObject::connect(socket, &QLocalSocket::readyRead, socket, [socket, cb] {
auto res = void_safe_call(cb, socket->readAll().toStdString());
QTC_CHECK_EXPECTED(res);
QObject::disconnect(*connection);
delete connection;
});
}, Qt::SingleShotConnection);
};
socketType["read"] = wrap(socketType["read_cb"].get<sol::function>()).get<sol::function>();