QPSQL: Fix crash when a prepared statement is deleted after the db was removed
When a prepared statement is still alive after the database was removed with QSqlDatabase::removeDatabase(), the cleanup routine is trying to access the driver which is no longer alive which results in a crash. Fix it by checking if the driver is still alive similar to 5f66486cc254e1483f776d3058f96db493fd26e5. Fixes: QTBUG-43889 Change-Id: Ib466a76d014e32c055d203bda15b075ad3dff3d9 Reviewed-by: Andy Shaw <andy.shaw@qt.io> Reviewed-by: Jesus Fernandez <jsfdez@gmail.com>
This commit is contained in:
parent
5f3bbd0cf0
commit
e2431b619d
@ -428,12 +428,14 @@ static QVariant::Type qDecodePSQLType(int t)
|
||||
|
||||
void QPSQLResultPrivate::deallocatePreparedStmt()
|
||||
{
|
||||
const QString stmt = QStringLiteral("DEALLOCATE ") + preparedStmtId;
|
||||
PGresult *result = drv_d_func()->exec(stmt);
|
||||
if (drv_d_func()) {
|
||||
const QString stmt = QStringLiteral("DEALLOCATE ") + preparedStmtId;
|
||||
PGresult *result = drv_d_func()->exec(stmt);
|
||||
|
||||
if (PQresultStatus(result) != PGRES_COMMAND_OK)
|
||||
qWarning("Unable to free statement: %s", PQerrorMessage(drv_d_func()->connection));
|
||||
PQclear(result);
|
||||
if (PQresultStatus(result) != PGRES_COMMAND_OK)
|
||||
qWarning("Unable to free statement: %s", PQerrorMessage(drv_d_func()->connection));
|
||||
PQclear(result);
|
||||
}
|
||||
preparedStmtId.clear();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user