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

Reply via email to