Skip to content

Commit

Permalink
Allow the user to overwrite a running reload worker
Browse files Browse the repository at this point in the history
  • Loading branch information
Chronial committed May 13, 2019
1 parent c512436 commit 28e9577
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 7 deletions.
4 changes: 2 additions & 2 deletions DbAlbumCollection.cpp
Expand Up @@ -139,8 +139,8 @@ void DBWriter::remove_tracks(metadb_handle_list_cref tracks) {
}
}

void DbAlbumCollection::onCollectionReload(DbReloadWorker&& worker) {
db = std::move(worker.db);
void DbAlbumCollection::onCollectionReload(std::unique_ptr<db_structure::DB> newDb) {
db = std::move(newDb);

decltype(libraryChangeQueue) changeQueue;
std::swap(changeQueue, libraryChangeQueue);
Expand Down
2 changes: 1 addition & 1 deletion DbAlbumCollection.h
Expand Up @@ -132,7 +132,7 @@ class DbAlbumCollection {
// Gets the leftmost album whose title starts with `input`
std::optional<DBPos> performFayt(const std::string& input);

void onCollectionReload(DbReloadWorker&& worker);
void onCollectionReload(std::unique_ptr<db_structure::DB> newDb);

DBIter begin() const;
DBIter end() const;
Expand Down
6 changes: 5 additions & 1 deletion DbReloadWorker.cpp
Expand Up @@ -25,7 +25,8 @@ DbReloadWorker::~DbReloadWorker() {

void DbReloadWorker::threadProc() {
TRACK_CALL_TEXT("Chronflow DbReloadWorker");
console::timer_scope timer("foo_chronflow collection generated in");
pfc::hires_timer timer;
timer.start();

engineThread.runInMainThread([&] {
++engineThread.libraryVersion;
Expand All @@ -46,5 +47,8 @@ void DbReloadWorker::threadProc() {
DBWriter(*db).add_tracks(std::move(library), abort);
abort.check();

FB2K_console_formatter() << "foo_chronflow collection generated in: "
<< pfc::format_time_ex(timer.query(), 6);
completed = true;
engineThread.send<EM::CollectionReloadedMessage>();
};
1 change: 1 addition & 0 deletions DbReloadWorker.h
Expand Up @@ -16,6 +16,7 @@ class DbReloadWorker {
~DbReloadWorker();

unique_ptr<db_structure::DB> db;
std::atomic<bool> completed = false;

private:
void threadProc();
Expand Down
7 changes: 4 additions & 3 deletions engine_messages.cpp
Expand Up @@ -98,13 +98,14 @@ std::optional<AlbumInfo> EM::GetTargetAlbum::run(Engine& e) {
}

void EM::ReloadCollection::run(Engine& e) {
if (e.reloadWorker)
return; // already running
// This will abort any already running reload worker
e.reloadWorker = make_unique<DbReloadWorker>(e.thread);
}

void EM::CollectionReloadedMessage::run(Engine& e) {
e.db.onCollectionReload(std::move(*e.reloadWorker));
if (!e.reloadWorker || !e.reloadWorker->completed)
return;
e.db.onCollectionReload(std::move(e.reloadWorker->db));
e.reloadWorker.reset();
e.texCache.onCollectionReload();
e.cacheDirty = true;
Expand Down

0 comments on commit 28e9577

Please sign in to comment.