Introduce ConcurrentAtomic and fix data race condition issue in Cocoa… #635
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.
#630
ThreadSanitizer reported a data race issue when accessing the
CocoaMQTTWebSocket.delegate
andCocoaMQTTLogger.minLevel
properties. The existing implementation assigns these properties asynchronously using a serial queue:Although a serial queue is used, the asynchronous call (async) does not guarantee timing consistency, which could lead to concurrent reads and writes if other parts of the code access delegate outside this queue.
Solution
Introduce
ConcurrentAtomic
object wrapper and annotateCocoaMQTTWebSocket.delegate
andCocoaMQTTLogger.minLevel
, make them thread safe. This ensures:Multiple concurrent reads are allowed.
Writes are serialized with a barrier and will not happen concurrently with reads or other writes.
This approach ensures thread-safe reads and writes without blocking non-mutating operations.