WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
258349
[GStreamer][MediaStream] Deadlock between capture source and mediastreamsrc element on WebProcess main thread
https://bugs.webkit.org/show_bug.cgi?id=258349
Summary
[GStreamer][MediaStream] Deadlock between capture source and mediastreamsrc e...
Philippe Normand
Reported
2023-06-21 04:38:19 PDT
In thread 21 the RealtimeMediaSource has m_videoFrameObserversLock held and requires a call to main thread, but thread 1 is calling RealtimeMediaSource::addVideoFrameObserver() which does a lock request on m_videoFrameObserversLock... Thread 21 (Thread 0x7ffdfeffd6c0 (LWP 2580170) "queue207:src"): #0 0x00007fffee521529 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, expected=0, futex_word=0x7fffdf3c4264) at futex-internal.c:57 #1 __futex_abstimed_wait_common (futex_word=futex_word@entry=0x7fffdf3c4264, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0, cancel=cancel@entry=true) at futex-internal.c:87 #2 0x00007fffee5215af in __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7fffdf3c4264, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0) at futex-internal.c:139 #3 0x00007fffee523ec9 in __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=<optimized out>, cond=0x7fffdf3c4238) at pthread_cond_wait.c:503 #4 ___pthread_cond_wait (cond=0x7fffdf3c4238, mutex=<optimized out>) at pthread_cond_wait.c:618 #5 0x00007ffff25e2fb9 in WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libjavascriptcoregtk-4.1.so.0 #6 0x00007ffff257b0c4 in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libjavascriptcoregtk-4.1.so.0 #7 0x00007ffff1963e02 in bool WTF::Condition::waitUntilUnchecked<WTF::Lock>(WTF::Lock&, WTF::TimeWithDynamicClockType const&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libjavascriptcoregtk-4.1.so.0 #8 0x00007ffff25dc0a4 in WTF::BinarySemaphore::waitUntil(WTF::TimeWithDynamicClockType const&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libjavascriptcoregtk-4.1.so.0 #9 0x00007ffff2571832 in WTF::callOnMainThreadAndWait(WTF::Function<void ()>&&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libjavascriptcoregtk-4.1.so.0 #10 0x00007ffff62745c2 in webkitMediaStreamSrcEnsureStreamCollectionPosted(_WebKitMediaStreamSrc*, bool) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #11 0x00007ffff62782f5 in InternalSource::pushSample(WTF::GRefPtr<_GstSample>&&, char const*) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #12 0x00007ffff62776eb in InternalSource::videoFrameAvailable(WebCore::VideoFrame&, WebCore::VideoFrameTimeMetadata) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #13 0x00007ffff625d18d in WebCore::RealtimeMediaSource::videoFrameAvailable(WebCore::VideoFrame&, WebCore::VideoFrameTimeMetadata) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #14 0x00007ffff6266897 in WebCore::RealtimeVideoCaptureSource::dispatchVideoFrameToObservers(WebCore::VideoFrame&, WebCore::VideoFrameTimeMetadata) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #15 0x00007ffff6288a72 in WTF::Detail::CallableWrapper<WebCore::MockRealtimeVideoSourceGStreamer::MockRealtimeVideoSourceGStreamer(WTF::String&&, WTF::AtomString&&, WebCore::MediaDeviceHashSalts&&)::$_0, void, WTF::Ref<WebCore::VideoFrameGStreamer, WTF::RawPtrTraits<WebCore::VideoFrameGStreamer> >&&>::call(WTF::Ref<WebCore::VideoFrameGStreamer, WTF::RawPtrTraits<WebCore::VideoFrameGStreamer> >&&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #16 0x00007ffff628098f in WebCore::GStreamerVideoCapturer::setSinkVideoFrameCallback(WTF::Function<void (WTF::Ref<WebCore::VideoFrameGStreamer, WTF::RawPtrTraits<WebCore::VideoFrameGStreamer> >&&)>&&)::$_0::__invoke(WebCore::GStreamerVideoCapturer*, _GstElement*) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #17 0x00007fffeaeccbe6 in ffi_call_unix64 () at ../src/x86/unix64.S:104 #18 0x00007fffeaec94bf in ffi_call_int (cif=cif@entry=0x7ffdfeffc250, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>, closure=closure@entry=0x0) at ../src/x86/ffi64.c:673 #19 0x00007fffeaecc18e in ffi_call (cif=cif@entry=0x7ffdfeffc250, fn=fn@entry=0x7ffff62808d0 <WebCore::GStreamerVideoCapturer::setSinkVideoFrameCallback(WTF::Function<void (WTF::Ref<WebCore::VideoFrameGStreamer, WTF::RawPtrTraits<WebCore::VideoFrameGStreamer> >&&)>&&)::$_0::__invoke(WebCore::GStreamerVideoCapturer*, _GstElement*)>, rvalue=rvalue@entry=0x7ffdfeffc1b0, avalue=avalue@entry=0x7ffdfeffc170) at ../src/x86/ffi64.c:710 #20 0x00007ffff2c25113 in g_cclosure_marshal_generic_va (closure=<optimized out>, return_value=<optimized out>, instance=<optimized out>, args_list=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=<optimized out>) at ../gobject/gclosure.c:1650 #21 0x00007ffff2c3c608 in _g_closure_invoke_va (param_types=0x0, n_params=<optimized out>, args=0x7ffdfeffc460, instance=0xe6f670, return_value=0x7ffdfeffc390, closure=0xe706a0) at ../gobject/gclosure.c:895 #22 g_signal_emit_valist (instance=0xe6f670, signal_id=259, detail=0, var_args=var_args@entry=0x7ffdfeffc460) at ../gobject/gsignal.c:3462 #23 0x00007ffff2c3c6f3 in g_signal_emit (instance=instance@entry=0xe6f670, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3612 #24 0x00007fffedd7c5c3 in gst_app_sink_render_common (psink=0xe6f670, data=0xb79870 [None], is_list=<optimized out>) at ../gst-libs/gst/app/gstappsink.c:1103 #25 0x00007fffedd53d2d in gst_base_sink_chain_unlocked.isra.0 (basesink=0xe6f670, obj=0xb79870, is_list=0, pad=<optimized out>) at ../libs/gst/base/gstbasesink.c:3952 #26 0x00007fffedd21bde in gst_base_sink_chain_main (basesink=0xe6f670, pad=<optimized out>, obj=0xb79870, is_list=0) at ../libs/gst/base/gstbasesink.c:4078 #27 0x00007fffedc33a1c in gst_pad_chain_data_unchecked (pad=pad@entry=0xe1ef20, type=type@entry=4112, data=data@entry=0xb79870) at ../gst/gstpad.c:4463 #28 0x00007fffedc347ae in gst_pad_push_data (pad=pad@entry=0xe1a730, type=type@entry=4112, data=data@entry=0xb79870) at ../gst/gstpad.c:4739 #29 0x00007fffedc34de4 in gst_pad_push (pad=0xe1a730, buffer=buffer@entry=0xb79870 [None]) at ../gst/gstpad.c:4858 #30 0x00007fff2c578ea9 in gst_queue_push_one (queue=0xe1b3d0) at ../plugins/elements/gstqueue.c:1388 #31 gst_queue_loop (pad=<optimized out>) at ../plugins/elements/gstqueue.c:1541 #32 0x00007fffedc6dee4 in gst_task_func (task=0xe77ed0) at ../gst/gsttask.c:384 #33 0x00007fffeea5db02 in g_thread_pool_thread_proxy (data=<optimized out>) at ../glib/gthreadpool.c:350 #34 0x00007fffeea5b373 in g_thread_proxy (data=0x7fffc8001100) at ../glib/gthread.c:831 #35 0x00007fffee524c57 in start_thread (arg=<optimized out>) at pthread_create.c:444 #36 0x00007fffee5aaa70 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81 ... Thread 1 (Thread 0x7fffe8d2ec00 (LWP 2580031) "WebKitWebProces"): #0 0x00007fffee521529 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, expected=0, futex_word=0x7fffdf00c360) at futex-internal.c:57 #1 __futex_abstimed_wait_common (futex_word=futex_word@entry=0x7fffdf00c360, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0, cancel=cancel@entry=true) at futex-internal.c:87 #2 0x00007fffee5215af in __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7fffdf00c360, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0) at futex-internal.c:139 #3 0x00007fffee523ec9 in __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=<optimized out>, cond=0x7fffdf00c338) at pthread_cond_wait.c:503 #4 ___pthread_cond_wait (cond=0x7fffdf00c338, mutex=<optimized out>) at pthread_cond_wait.c:618 #5 0x00007ffff25e2fb9 in WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libjavascriptcoregtk-4.1.so.0 #6 0x00007ffff257b0c4 in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libjavascriptcoregtk-4.1.so.0 #7 0x00007ffff2570459 in WTF::LockAlgorithm<unsigned char, (unsigned char)1, (unsigned char)2, WTF::EmptyLockHooks<unsigned char> >::lockSlow(WTF::Atomic<unsigned char>&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libjavascriptcoregtk-4.1.so.0 #8 0x00007ffff625c12e in WebCore::RealtimeMediaSource::addVideoFrameObserver(WebCore::RealtimeMediaSource::VideoFrameObserver&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #9 0x00007ffff6274ba1 in webkitMediaStreamSrcAddTrack(_WebKitMediaStreamSrc*, WebCore::MediaStreamTrackPrivate*, bool, bool) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #10 0x00007ffff62752da in webkitMediaStreamSrcSetStream(_WebKitMediaStreamSrc*, WebCore::MediaStreamPrivate*, bool) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #11 0x00007ffff2c1ce27 in g_cclosure_marshal_VOID__OBJECTv (closure=0x433160, return_value=<optimized out>, instance=0xf0e960, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0xb072b0) at ../gobject/gmarshal.c:1910 #12 0x00007ffff2c3c608 in _g_closure_invoke_va (param_types=0xb072b0, n_params=<optimized out>, args=0x7fffffffca40, instance=0xf0e960, return_value=0x0, closure=0x433160) at ../gobject/gclosure.c:895 #13 g_signal_emit_valist (instance=0xf0e960, signal_id=304, detail=0, var_args=var_args@entry=0x7fffffffca40) at ../gobject/gsignal.c:3462 #14 0x00007ffff2c3c6f3 in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../gobject/gsignal.c:3612 #15 0x00007ffff2c1ce27 in g_cclosure_marshal_VOID__OBJECTv (closure=0xbc3630, return_value=<optimized out>, instance=0xd03130, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0xc70d80) at ../gobject/gmarshal.c:1910 #16 0x00007ffff2c3c608 in _g_closure_invoke_va (param_types=0xc70d80, n_params=<optimized out>, args=0x7fffffffcd00, instance=0xd03130, return_value=0x0, closure=0xbc3630) at ../gobject/gclosure.c:895 #17 g_signal_emit_valist (instance=0xd03130, signal_id=308, detail=0, var_args=var_args@entry=0x7fffffffcd00) at ../gobject/gsignal.c:3462 #18 0x00007ffff2c3c6f3 in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../gobject/gsignal.c:3612 #19 0x00007ffff2c1ce27 in g_cclosure_marshal_VOID__OBJECTv (closure=0xe87670, return_value=<optimized out>, instance=0xe70780, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0xaaaac0) at ../gobject/gmarshal.c:1910 #20 0x00007ffff2c3c608 in _g_closure_invoke_va (param_types=0xaaaac0, n_params=<optimized out>, args=0x7fffffffcfc0, instance=0xe70780, return_value=0x0, closure=0xe87670) at ../gobject/gclosure.c:895 #21 g_signal_emit_valist (instance=0xe70780, signal_id=314, detail=0, var_args=var_args@entry=0x7fffffffcfc0) at ../gobject/gsignal.c:3462 #22 0x00007ffff2c3c6f3 in g_signal_emit (instance=instance@entry=0xe70780, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3612 #23 0x00007fff2c4d2e6d in setup_source (urisrc=<optimized out>) at ../gst/playback/gsturisourcebin.c:2291 #24 gst_uri_source_bin_change_state (element=0xe70780, transition=<optimized out>) at ../gst/playback/gsturisourcebin.c:2988 #25 0x00007fffedc135b4 in gst_element_change_state (element=element@entry=0xe70780, transition=GST_STATE_CHANGE_READY_TO_PAUSED) at ../gst/gstelement.c:3093 #26 0x00007fffedc13361 in gst_element_continue_state (element=element@entry=0xe70780, ret=ret@entry=GST_STATE_CHANGE_SUCCESS) at ../gst/gstelement.c:2801 #27 0x00007fffedc135f8 in gst_element_change_state (element=element@entry=0xe70780, transition=transition@entry=GST_STATE_CHANGE_NULL_TO_READY) at ../gst/gstelement.c:3132 #28 0x00007fffedc13b69 in gst_element_set_state_func (element=0xe70780, state=GST_STATE_PAUSED) at ../gst/gstelement.c:3047 #29 0x00007fffedc12fff in gst_element_sync_state_with_parent (element=0xe70780) at ../gst/gstelement.c:2473 #30 0x00007fff2c510ecc in activate_source_item.isra.0 (item=<optimized out>) at ../gst/playback/gsturidecodebin3.c:928 #31 0x00007fff2c4c7ece in assign_handlers_to_item (item=0xf1ec30, dec=<optimized out>) at ../gst/playback/gsturidecodebin3.c:1917 #32 activate_play_item (item=0xf1ec30) at ../gst/playback/gsturidecodebin3.c:1936 #33 0x00007fff2c4c8044 in gst_uri_decode_bin3_change_state (element=0xd03130, transition=<optimized out>) at ../gst/playback/gsturidecodebin3.c:1976 #34 0x00007fffedc135b4 in gst_element_change_state (element=element@entry=0xd03130, transition=transition@entry=GST_STATE_CHANGE_READY_TO_PAUSED) at ../gst/gstelement.c:3093 #35 0x00007fffedc13b69 in gst_element_set_state_func (element=0xd03130, state=GST_STATE_PAUSED) at ../gst/gstelement.c:3047 #36 0x00007fffedbebe78 in gst_bin_element_set_state (next=<optimized out>, current=<optimized out>, start_time=0 [0:00:00.000000000], base_time=0 [0:00:00.000000000], element=0xd03130, bin=<optimized out>) at ../gst/gstbin.c:2582 #37 gst_bin_change_state_func (element=0xf0e960, transition=GST_STATE_CHANGE_READY_TO_PAUSED) at ../gst/gstbin.c:2931 #38 0x00007fffedc40a0e in gst_pipeline_change_state (element=0xf0e960, transition=GST_STATE_CHANGE_READY_TO_PAUSED) at ../gst/gstpipeline.c:529 #39 0x00007fff2c4ec199 in gst_play_bin3_change_state (element=0xf0e960, transition=<optimized out>) at ../gst/playback/gstplaybin3.c:2701 #40 0x00007fffedc135b4 in gst_element_change_state (element=element@entry=0xf0e960, transition=GST_STATE_CHANGE_READY_TO_PAUSED) at ../gst/gstelement.c:3093 #41 0x00007fffedc13361 in gst_element_continue_state (element=element@entry=0xf0e960, ret=ret@entry=GST_STATE_CHANGE_SUCCESS) at ../gst/gstelement.c:2801 #42 0x00007fffedc135f8 in gst_element_change_state (element=element@entry=0xf0e960, transition=transition@entry=GST_STATE_CHANGE_NULL_TO_READY) at ../gst/gstelement.c:3132 #43 0x00007fffedc13b69 in gst_element_set_state_func (element=0xf0e960, state=GST_STATE_PAUSED) at ../gst/gstelement.c:3047 #44 0x00007ffff61d43a0 in WebCore::MediaPlayerPrivateGStreamer::changePipelineState(GstState) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #45 0x00007ffff61cf990 in WebCore::MediaPlayerPrivateGStreamer::load(WTF::String const&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #46 0x00007ffff61d0d04 in WebCore::MediaPlayerPrivateGStreamer::load(WebCore::MediaStreamPrivate&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #47 0x00007ffff6137d61 in WebCore::MediaPlayer::loadWithNextMediaEngine(WebCore::MediaPlayerFactory const*) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #48 0x00007ffff613812e in WebCore::MediaPlayer::load(WebCore::MediaStreamPrivate&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #49 0x00007ffff5adf34f in WebCore::HTMLMediaElement::loadResource(WTF::URL const&, WebCore::ContentType&, WTF::String const&) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #50 0x00007ffff5afa3b1 in WTF::Detail::CallableWrapper<WebCore::HTMLMediaElement::selectMediaResource()::$_0, void>::call() () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #51 0x00007ffff58e97ce in WebCore::EventLoop::run() () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #52 0x00007ffff5972d1c in WebCore::WindowEventLoop::didReachTimeToRun() () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #53 0x00007ffff600d5a9 in WebCore::ThreadTimers::sharedTimerFiredInternal() () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #54 0x00007ffff25df90e in WTF::RunLoop::TimerBase::TimerBase(WTF::RunLoop&)::$_0::__invoke(void*) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libjavascriptcoregtk-4.1.so.0 #55 0x00007ffff25dedda in WTF::RunLoop::$_0::__invoke(_GSource*, int (*)(void*), void*) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libjavascriptcoregtk-4.1.so.0 #56 0x00007fffeea2af58 in g_main_dispatch (context=0x43d810) at ../glib/gmain.c:3460 #57 g_main_context_dispatch (context=0x43d810) at ../glib/gmain.c:4200 #58 0x00007fffeea8acd8 in g_main_context_iterate.isra.0 (context=0x43d810, block=1, dispatch=1, self=<optimized out>) at ../glib/gmain.c:4276 #59 0x00007fffeea30bcf in g_main_loop_run (loop=0x5a8fe0) at ../glib/gmain.c:4479 #60 0x00007ffff25df378 in WTF::RunLoop::run() () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libjavascriptcoregtk-4.1.so.0 #61 0x00007ffff4865d2b in WebKit::WebProcessMain(int, char**) () at /var/home/phil/WebKit/WebKitBuild/GTK/Release/lib/libwebkit2gtk-4.1.so.0 #62 0x00007fffee4bfb4a in __libc_start_call_main (main=main@entry=0x401130 <main>, argc=argc@entry=3, argv=argv@entry=0x7fffffffdd98) at ../sysdeps/nptl/libc_start_call_main.h:58 #63 0x00007fffee4bfc0b in __libc_start_main_impl (main=0x401130 <main>, argc=3, argv=0x7fffffffdd98, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffdd88) at ../csu/libc-start.c:360 #64 0x0000000000401065 in _start () Detaching from program: /var/home/phil/WebKit/WebKitBuild/GTK/Release/bin/WebKitWebProcess, process 2580031 [Inferior 1 (process 2580031) detached]
Attachments
Add attachment
proposed patch, testcase, etc.
Philippe Normand
Comment 1
2023-06-23 01:28:52 PDT
Pull request:
https://github.com/WebKit/WebKit/pull/15231
EWS
Comment 2
2023-06-26 01:19:11 PDT
Committed
265507@main
(30508986e68c): <
https://commits.webkit.org/265507@main
> Reviewed commits have been landed. Closing PR #15231 and removing active labels.
Radar WebKit Bug Importer
Comment 3
2023-06-26 01:20:16 PDT
<
rdar://problem/111314317
>
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug