Safely close database connections and delete backends

Also fix NewClosure leak caused by disconnected object signals
This commit is contained in:
Jonas Kvinge
2019-07-24 19:16:51 +02:00
parent bd78e8c275
commit b5eb13449b
47 changed files with 490 additions and 53 deletions

View File

@@ -41,6 +41,7 @@
#include "collectionquery.h"
#include "directory.h"
class QThread;
class Database;
class CollectionBackendInterface : public QObject {
@@ -123,7 +124,12 @@ class CollectionBackend : public CollectionBackendInterface {
static const char *kSettingsGroup;
Q_INVOKABLE CollectionBackend(QObject *parent = nullptr);
~CollectionBackend();
void Init(Database *db, const Song::Source source, const QString &songs_table, const QString &dirs_table, const QString &subdirs_table, const QString &fts_table);
void Close();
void ExitAsync();
Database *db() const { return db_; }
@@ -183,6 +189,7 @@ class CollectionBackend : public CollectionBackendInterface {
SongList GetSongsBySongId(const QStringList &song_ids);
public slots:
void Exit();
void LoadDirectories();
void UpdateTotalSongCount();
void UpdateTotalArtistCount();
@@ -200,7 +207,7 @@ class CollectionBackend : public CollectionBackendInterface {
void ResetStatistics(int id);
void SongPathChanged(const Song &song, const QFileInfo &new_file);
signals:
signals:
void DirectoryDiscovered(const Directory &dir, const SubdirectoryList &subdirs);
void DirectoryDeleted(const Directory &dir);
@@ -214,6 +221,8 @@ signals:
void TotalArtistCountUpdated(int total);
void TotalAlbumCountUpdated(int total);
void ExitFinished();
private:
struct CompilationInfo {
CompilationInfo() : has_compilation_detected(false), has_not_compilation_detected(false) {}
@@ -243,6 +252,7 @@ signals:
QString dirs_table_;
QString subdirs_table_;
QString fts_table_;
QThread *original_thread_;
};