mirror of
https://github.com/electron/electron.git
synced 2026-01-11 00:18:02 -05:00
When running `getDisplayMedia` from an `iframe` and then destroying that
`iframe`, the destrutcor for ScreenCaptureKitDeviceMac gets run, but it
doesn't clean up the observers for the shared macOS picker.
In this change we remove the observer on cleanup and fix the associated
crash:
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x12c024123a0> was mutated while being enumerated.'
0 CoreFoundation 0x000000018eda0ec0 __exceptionPreprocess + 176
1 libobjc.A.dylib 0x000000018e886cd8 objc_exception_throw + 88
2 CoreFoundation 0x000000018ee47f80 -[__NSSingleObjectEnumerator init] + 0
3 ScreenCaptureKit 0x000000022971f3e0 -[SCContentSharingPicker contentPickerDidSelectFilter:forStream:] + 436
4 ReplayKit 0x00000001d7b879d8 -[RPScreenRecorder contentPickerDidSelectFilter:forStream:] + 84
5 ReplayKit 0x00000001d7b95ce0 -[RPDaemonProxy contentPickerDidSelectFilter:forStream:] + 224
6 CoreFoundation 0x000000018ed0e8b4 __invoking___ + 148
7 CoreFoundation 0x000000018ed0e72c -[NSInvocation invoke] + 428
8 ReplayKit 0x00000001d7b91678 -[RPDaemonProxy connection:handleInvocation:isReply:] + 316
9 Foundation 0x0000000190899f64 -[NSXPCConnection _decodeAndInvokeMessageWithEvent:reply:flags:] + 1108
10 Foundation 0x000000019089b7d0 message_handler_message + 88
11 Foundation 0x000000018feb0160 message_handler + 152
12 libxpc.dylib 0x000000018e954460 _xpc_connection_call_event_handler + 144
13 libxpc.dylib 0x000000018e952bb4 _xpc_connection_mach_event + 1120
14 libdispatch.dylib 0x000000018ea94718 _dispatch_client_callout4 + 20
15 libdispatch.dylib 0x000000018eab0c00 _dispatch_mach_msg_invoke + 464
16 libdispatch.dylib 0x000000018ea9bae8 _dispatch_lane_serial_drain + 368
17 libdispatch.dylib 0x000000018eab1954 _dispatch_mach_invoke + 456
18 libdispatch.dylib 0x000000018ea9bae8 _dispatch_lane_serial_drain + 368
19 libdispatch.dylib 0x000000018ea9c79c _dispatch_lane_invoke + 432
20 libdispatch.dylib 0x000000018eaa77e8 _dispatch_root_queue_drain_deferred_wlh + 288
21 libdispatch.dylib 0x000000018eaa7034 _dispatch_workloop_worker_thread + 540
22 libsystem_pthread.dylib 0x000000018ec433d8 _pthread_wqthread + 288
23 libsystem_pthread.dylib 0x000000018ec420f0 start_wqthread + 8