Fix period backup crash due to the dead lock of std::lock_guard (2nd Solution) #14917
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The crash occurs because the thread terminates the task prematurely due to
PostMessage
's nature, soFileManager::backupCurrentBuffer()
is run always by the main thread - it makes the linestd::lock_guard<std::mutex> lock(backup_mutex);
has the dead lock on the 2nd main thread's entry and cause the crash:https://en.cppreference.com/w/cpp/thread/mutex/lock
Using
SendMessage
instead ofPostMessage
to ensure that thread keeps the mutex until entire operation is terminated.This solution seems better than #14914 because for the following reasons:
FileManager::backupCurrentBuffer()
(with write method blocked), the goal of the lock is to prevent the race condition. Whereas this PR prevents the 2nd thread from entering intoFileManager::backupCurrentBuffer()
, until the 1st thread finish its task.Fix #14906