fix potential mem leak on connection lost
The PostgreSQL driver can change it's connection status after the first established connection. In this case, the function "isOpen()" returns false and the "close()" function would not free all resources. With this fix, the "close()" function always frees any allocated resource independent of the connection status. Fixes: QTBUG-88984 Pick-to: 6.0 5.15 5.12 Change-Id: I7c9add6a183bf46a8573952ab39f8cb1f728c00c Reviewed-by: Andy Shaw <andy.shaw@qt.io>
This commit is contained in:
parent
94b6bec01f
commit
6e9125608f
@ -1197,8 +1197,7 @@ bool QPSQLDriver::open(const QString &db,
|
||||
const QString &connOpts)
|
||||
{
|
||||
Q_D(QPSQLDriver);
|
||||
if (isOpen())
|
||||
close();
|
||||
close();
|
||||
QString connectString;
|
||||
if (!host.isEmpty())
|
||||
connectString.append(QLatin1String("host=")).append(qQuote(host));
|
||||
@ -1241,21 +1240,19 @@ bool QPSQLDriver::open(const QString &db,
|
||||
void QPSQLDriver::close()
|
||||
{
|
||||
Q_D(QPSQLDriver);
|
||||
if (isOpen()) {
|
||||
|
||||
d->seid.clear();
|
||||
if (d->sn) {
|
||||
disconnect(d->sn, SIGNAL(activated(QSocketDescriptor)), this, SLOT(_q_handleNotification()));
|
||||
delete d->sn;
|
||||
d->sn = nullptr;
|
||||
}
|
||||
|
||||
if (d->connection)
|
||||
PQfinish(d->connection);
|
||||
d->connection = nullptr;
|
||||
setOpen(false);
|
||||
setOpenError(false);
|
||||
d->seid.clear();
|
||||
if (d->sn) {
|
||||
disconnect(d->sn, SIGNAL(activated(QSocketDescriptor)), this, SLOT(_q_handleNotification()));
|
||||
delete d->sn;
|
||||
d->sn = nullptr;
|
||||
}
|
||||
|
||||
if (d->connection)
|
||||
PQfinish(d->connection);
|
||||
d->connection = nullptr;
|
||||
setOpen(false);
|
||||
setOpenError(false);
|
||||
}
|
||||
|
||||
QSqlResult *QPSQLDriver::createResult() const
|
||||
|
Loading…
x
Reference in New Issue
Block a user