Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 66793be1c5e22d471fd3c57d64be06b46f012fcd
https://github.com/WebKit/WebKit/commit/66793be1c5e22d471fd3c57d64be06b46f012fcd
Author: Andy Estes <[email protected]>
Date: 2023-11-04 (Sat, 04 Nov 2023)
Changed paths:
M
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h
M
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm
Log Message:
-----------
[Cocoa] Thread-unsafe use of Vector in WebAVSampleBufferErrorListener
https://bugs.webkit.org/show_bug.cgi?id=264217
rdar://117950166
Reviewed by Eric Carlson.
WebAVSampleBufferErrorListener contains two Vectors (_layers and _renderers)
that are accessed from
the main thread as well as whichever thread AVFoundation uses to post
notifications and key-value
observation callbacks; this is unsafe.
Addressed this by ensuring both Vectors are accessed on the main thread. Also
did the following:
- Renamed WebAVSampleBufferErrorListener to WebAVSampleBufferListener since it
observes more than
just errors.
- Made use of context pointers in the key-value observer to make
WebAVSampleBufferListener safe for
subclassing.
- Fixed some style issues.
*
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
*
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(-[WebAVSampleBufferListener initWithParent:]):
(-[WebAVSampleBufferListener invalidate]):
(-[WebAVSampleBufferListener beginObservingLayer:]):
(-[WebAVSampleBufferListener stopObservingLayer:]):
(-[WebAVSampleBufferListener beginObservingRenderer:]):
(-[WebAVSampleBufferListener stopObservingRenderer:]):
(-[WebAVSampleBufferListener observeValueForKeyPath:ofObject:change:context:]):
(-[WebAVSampleBufferListener layerFailedToDecode:]):
(-[WebAVSampleBufferListener layerRequiresFlushToResumeDecodingChanged:]):
(-[WebAVSampleBufferListener audioRendererWasAutomaticallyFlushed:]):
(WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
(WebCore::SourceBufferPrivateAVFObjC::destroyRenderers):
(WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
(WebCore::SourceBufferPrivateAVFObjC::setVideoLayer):
(-[WebAVSampleBufferErrorListener initWithParent:]): Deleted.
(-[WebAVSampleBufferErrorListener dealloc]): Deleted.
(-[WebAVSampleBufferErrorListener invalidate]): Deleted.
(-[WebAVSampleBufferErrorListener beginObservingLayer:]): Deleted.
(-[WebAVSampleBufferErrorListener stopObservingLayer:]): Deleted.
(-[WebAVSampleBufferErrorListener beginObservingRenderer:]): Deleted.
(-[WebAVSampleBufferErrorListener stopObservingRenderer:]): Deleted.
(-[WebAVSampleBufferErrorListener
observeValueForKeyPath:ofObject:change:context:]): Deleted.
(-[WebAVSampleBufferErrorListener layerFailedToDecode:]): Deleted.
(-[WebAVSampleBufferErrorListener layerRequiresFlushToResumeDecodingChanged:]):
Deleted.
(-[WebAVSampleBufferErrorListener layerReadyForDisplayChanged:]): Deleted.
(-[WebAVSampleBufferErrorListener audioRendererWasAutomaticallyFlushed:]):
Deleted.
Canonical link: https://commits.webkit.org/270237@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes