[AsyncFileHandler] insure good synchronization for 'fRecordBuffer' #70
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.
What it does
This field is accessed by various threads, whenever logging is happening. All accesses are synchronized except the empty check in timer thread, done before calling flush().
Once in a while, the record buffer is flushed to the writer queue and a new, empty buffer is created and assigned to "fRecordBuffer". If that happens just before the timer task does its empty check, that thread might still see the old buffer, and then the call to flush() might result in adding an empty buffer to the queue. To avoid that, the empty check has been moved inside the synchronized flush() function.
Also, for explicitness's sake, mark field fFileHandler as final. It's already used as such, and is only set in the constructor, but this makes it explicit.
How to test
Confirm that CI still passes.
Follow-ups
N/A
Review checklist