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