forked from qt-creator/qt-creator
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:
@@ -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>();
|
||||
|
Reference in New Issue
Block a user