[webkit-changes] [WebKit/WebKit] 66793b: [Cocoa] Thread-unsafe use of Vector in WebAVSample...

aestes noreply at github.com
Sat Nov 4 19:13:08 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 66793be1c5e22d471fd3c57d64be06b46f012fcd
      https://github.com/WebKit/WebKit/commit/66793be1c5e22d471fd3c57d64be06b46f012fcd
  Author: Andy Estes <aestes at apple.com>
  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




More information about the webkit-changes mailing list