Details
-
Bug
-
Resolution: Done
-
P2: Important
-
None
-
5.11.0 Alpha
-
None
-
5f66486cc254e1483f776d3058f96db493fd26e5
Description
I have a login dialog where you can select a database server and a database.
The database can be selected via a combobox displaying a QSqlQueryModel.
In the destructor I remove all the connections used for listing the databases and the model gets destroyed by it's parent (the dialog).
In short something like this (for a complete example see attachment):
QSqlQueryModel *model = new QSqlQueryModel(this); fillModel(model, sServerKey); //model->clear(); // this prevents the crash QSqlDatabase::removeDatabase(sServerKey); // parent deletes model -> crash
When the model gets deleted the program crashes in QPSQLResult::cleanup() while executing d->drv_d_func()->finishQuery(d->stmtId); because d->drv_d_func() returns a nullptr.
#0 in QPSQLDriverPrivate::finishQuery(int) src/plugins/sqldrivers/psql/qsql_psql.cpp:282:48 #1 in QPSQLResult::cleanup() src/plugins/sqldrivers/psql/qsql_psql.cpp:487:26 #2 in QPSQLResult::~QPSQLResult() src/plugins/sqldrivers/psql/qsql_psql.cpp:466:5 #3 in QPSQLResult::~QPSQLResult() src/plugins/sqldrivers/psql/qsql_psql.cpp:464:1 #4 in QSqlQueryPrivate::~QSqlQueryPrivate() src/sql/kernel/qsqlquery.cpp:94:5 #5 in QSqlQuery::~QSqlQuery() src/sql/kernel/qsqlquery.cpp:245:9 #6 in QSqlQueryModelPrivate::~QSqlQueryModelPrivate() src/sql/models/qsqlquerymodel.cpp:88:1 #7 in QSqlQueryModelPrivate::~QSqlQueryModelPrivate() src/sql/models/qsqlquerymodel.cpp:87:1 #8 in QScopedPointerDeleter<QObjectData>::cleanup(QObjectData*) src/corelib/tools/qscopedpointer.h:60:9 #9 in QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::~QScopedPointer() src/corelib/tools/qscopedpointer.h:107:9 #10 in QObject::~QObject() src/corelib/kernel/qobject.cpp:1033:1 #11 in QAbstractItemModel::~QAbstractItemModel() src/corelib/itemmodels/qabstractitemmodel.cpp:1555:1 #12 in QAbstractTableModel::~QAbstractTableModel() src/corelib/itemmodels/qabstractitemmodel.cpp:3573:1 #13 in QSqlQueryModel::~QSqlQueryModel() src/sql/models/qsqlquerymodel.cpp:173:1 #14 in QSqlQueryModel::~QSqlQueryModel() src/sql/models/qsqlquerymodel.cpp:172:1 #15 in main psql_crash.cpp:51:2
This worked before Qt 5.11 and was likely introduced by f99d2b21b8fc867f0ed21dcbfa47865ad013db97
Attachments
For Gerrit Dashboard: QTBUG-66553 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
221070,3 | Fix crash when deleting a QSqlQueryModel after closing the database | 5.11 | qt/qtbase | Status: MERGED | +2 | 0 |