Fix race in ref/deref of StringImpl for some cases #1372
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.
This fixes some random use-after-free reported by ASAN (when destroying SourceBufferPrivateGStreamer) and by Ref/Deref threading check applied on StringImpl object.
first commit addresses the race between main and streaming thread on track id string refcount. WebKitMediaSourceGStreamer references trackId in streaming thread when creating stream id, when notifying of low buffer level and for debugging purposes. The lifetime of trackId is guarantied to outlive streaming thread, so it should be enough to avoid copying the trackId or create an isolated copy when needed.
second commit addresses potential problem with the copy of Nicosia Animation. The Ref/Deref check report that same string is shared between main and compositor threads.
The Ref/Deref threading check implementation is available here:
emutavchi@724ef45. It is not included in this PR because it brings some overhead and may give false positive results (so reports should be reviewed carefully).