Fix object leaks in database code

Qt's database and query model requires that both the queries and the database
objects are out of scope before a database connection can safely be removed.

Solution: Properly encapsulate databases and queries in "{ }" and use a string
to cache the connection name for out-of-scope removal.
This commit is contained in:
Felix Kauselmann
2020-08-25 14:30:13 +02:00
parent 48a0d64837
commit 4b3042def4
11 changed files with 924 additions and 868 deletions

View File

@ -552,17 +552,20 @@ void PropertiesDialog::setComics(QList<ComicDB> comics)
void PropertiesDialog::updateComics()
{
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
db.open();
db.transaction();
QList<ComicDB>::iterator itr;
for (itr = comics.begin(); itr != comics.end(); itr++) {
if (itr->info.edited)
DBHelper::update(&(itr->info), db);
QString connectionName = "";
{
QSqlDatabase db = DataBaseManagement::loadDatabase(databasePath);
db.open();
db.transaction();
QList<ComicDB>::iterator itr;
for (itr = comics.begin(); itr != comics.end(); itr++) {
if (itr->info.edited)
DBHelper::update(&(itr->info), db);
}
db.commit();
connectionName = db.connectionName();
}
db.commit();
db.close();
QSqlDatabase::removeDatabase(databasePath);
QSqlDatabase::removeDatabase(connectionName);
}
void PropertiesDialog::setMultipleCover()