mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
Unitary thread review (#623)
* Fix uninitialized members of ProjectFileIO... ... which fixes this problem I observed: Opening a previously saved project, saving-as to another path, then exiting Audacity, gives a progress dialog waiting for checkpoints to end, which doesn't go away * Remove two mutexes... ... One wasn't used at all, and another was only ever used by one thread, and then not correctly unlocked for each locking on all possible paths. * Values that the worker thread writes and main reads should be atomic * Remember to close db connections even after failure to open
This commit is contained in:
parent
061208c5cf
commit
17a4958173
@ -311,11 +311,8 @@ void ProjectFileIO::CheckpointThread()
|
||||
}
|
||||
|
||||
// Capture the number of pages that need checkpointing and reset
|
||||
mCheckpointCurrentPages = mCheckpointWaitingPages;
|
||||
mCheckpointCurrentPages.store( mCheckpointWaitingPages );
|
||||
mCheckpointWaitingPages = 0;
|
||||
|
||||
// Lock out others while the checkpoint is running
|
||||
mCheckpointActive.lock();
|
||||
}
|
||||
|
||||
// Open another connection to the DB to prevent blocking the main thread.
|
||||
@ -334,10 +331,10 @@ void ProjectFileIO::CheckpointThread()
|
||||
|
||||
// Reset
|
||||
mCheckpointCurrentPages = 0;
|
||||
|
||||
// Checkpoint is complete
|
||||
mCheckpointActive.unlock();
|
||||
}
|
||||
else
|
||||
// Gotta close it anyway!
|
||||
sqlite3_close( db );
|
||||
}
|
||||
|
||||
return;
|
||||
@ -348,7 +345,7 @@ int ProjectFileIO::CheckpointHook(void *data, sqlite3 *db, const char *schema, i
|
||||
// Get access to our object
|
||||
ProjectFileIO *that = static_cast<ProjectFileIO *>(data);
|
||||
|
||||
// Qeuue the database pointer for our checkpoint thread to process
|
||||
// Queue the database pointer for our checkpoint thread to process
|
||||
std::lock_guard<std::mutex> guard(that->mCheckpointMutex);
|
||||
that->mCheckpointWaitingPages = pages;
|
||||
that->mCheckpointCondition.notify_one();
|
||||
|
@ -229,11 +229,9 @@ private:
|
||||
std::thread mCheckpointThread;
|
||||
std::condition_variable mCheckpointCondition;
|
||||
std::mutex mCheckpointMutex;
|
||||
std::mutex mCheckpointActive;
|
||||
std::mutex mCheckpointClose;
|
||||
std::atomic_bool mCheckpointStop;
|
||||
uint64_t mCheckpointWaitingPages;
|
||||
uint64_t mCheckpointCurrentPages;
|
||||
std::atomic_bool mCheckpointStop{ false };
|
||||
std::atomic< std::uint64_t > mCheckpointWaitingPages{ 0 };
|
||||
std::atomic< std::uint64_t > mCheckpointCurrentPages{ 0 };
|
||||
|
||||
friend SqliteSampleBlock;
|
||||
friend AutoCommitTransaction;
|
||||
|
Loading…
x
Reference in New Issue
Block a user