[PLAT-6112] Fix possible deadlock when recording threads #1011
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.
Goal
There was the possibility of a deadlock when recording all threads (for a handled event) due to use of the Objective-C runtime while other threads were suspended.
This issue was manifesting as an intermittent failure of the unit tests to complete within their timeout.
This issue was introduced in release v6.2.3 by #992
Changeset
backtrace_for_callstack()
was being called while threads were suspended, and accepted anNSArray
resulting in the Objective-C runtime being called for reference counting, reading the array items and their values.Refactored the methods and functions to ensure the
callStackReturnAddresses
NSArray
is converted to a plain C struct before any mach thread related calls are made.Testing
Tested by running unit tests locally.