Title: [295568] trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm
Revision
295568
Author
[email protected]
Date
2022-06-15 12:28:01 -0700 (Wed, 15 Jun 2022)

Log Message

[Cocoa] Crash in SourceBufferPrivateAVFObjC::layerDidReceiveError.
https://bugs.webkit.org/show_bug.cgi?id=241599
rdar://92972452

Reviewed by Jer Noble.

Have WebAVSampleBufferErrorListener take a strong reference to `parent` before calling it.

* Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
(-[WebAVSampleBufferErrorListener layerFailedToDecode:]):
(-[WebAVSampleBufferErrorListener audioRendererWasAutomaticallyFlushed:]):

Canonical link: https://commits.webkit.org/251573@main

Modified Paths

Diff

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm (295567 => 295568)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm	2022-06-15 18:01:02 UTC (rev 295567)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm	2022-06-15 19:28:01 UTC (rev 295568)
@@ -210,13 +210,13 @@
                 return;
 
             callOnMainThread([parent = _parent, layer = WTFMove(layer), error = WTFMove(error)] {
-                if (parent)
-                    parent->layerDidReceiveError(layer.get(), error.get());
+                if (auto strongParent = RefPtr { parent.get() })
+                    strongParent->layerDidReceiveError(layer.get(), error.get());
             });
         } else if ([keyPath isEqualToString:@"outputObscuredDueToInsufficientExternalProtection"]) {
             callOnMainThread([parent = _parent, obscured = [[change valueForKey:NSKeyValueChangeNewKey] boolValue]] {
-                if (parent)
-                    parent->outputObscuredDueToInsufficientExternalProtectionChanged(obscured);
+                if (auto strongParent = RefPtr { parent.get() })
+                    strongParent->outputObscuredDueToInsufficientExternalProtectionChanged(obscured);
             });
         } else
             ASSERT_NOT_REACHED();
@@ -233,8 +233,8 @@
         ASSERT([keyPath isEqualToString:@"error"]);
 
         callOnMainThread([parent = _parent, renderer = WTFMove(renderer), error = WTFMove(error)] {
-            if (parent)
-                parent->rendererDidReceiveError(renderer.get(), error.get());
+            if (auto strongParent = RefPtr { parent.get() })
+                strongParent->rendererDidReceiveError(renderer.get(), error.get());
         });
     } else
         ASSERT_NOT_REACHED();
@@ -247,8 +247,8 @@
         return;
 
     callOnMainThread([parent = _parent, layer = WTFMove(layer), error = retainPtr([[note userInfo] valueForKey:AVSampleBufferDisplayLayerFailedToDecodeNotificationErrorKey])] {
-        if (parent)
-            parent->layerDidReceiveError(layer.get(), error.get());
+        if (auto strongParent = RefPtr { parent.get() })
+            strongParent->layerDidReceiveError(layer.get(), error.get());
     });
 }
 
@@ -259,8 +259,8 @@
         return;
 
     callOnMainThread([parent = _parent, renderer = WTFMove(renderer), flushTime = [[[note userInfo] valueForKey:AVSampleBufferAudioRendererFlushTimeKey] CMTimeValue]] {
-        if (parent)
-            parent->rendererWasAutomaticallyFlushed(renderer.get(), flushTime);
+        if (auto strongParent = RefPtr { parent.get() })
+            strongParent->rendererWasAutomaticallyFlushed(renderer.get(), flushTime);
     });
 }
 @end
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to