eframe: Only call run_return twice on Windows#3053
Merged
emilk merged 1 commit intoemilk:masterfrom Jun 5, 2023
Merged
Conversation
The approach of emilk#1889 may remove observers in a view twice, which produces the Obj-C Exception: Cannot remove an observer <...> for the key path "nextResponder" from <WinitView ...> because it is not registered as an observer. The above message can only be seen when attaching the application to debugger. Users normally see: [1] *** trace trap cargo run This commit fixes it by only running `event_loop.run_return()` twice on Windows. Besides: * We have set `ControlFlow::Exit` on `Event::LoopDestroyed`, `EventResult::Exit` and on error; therefore, it is safe to not calling `set_exit()`. * This commit also fix the persistence function in macOS. It can't store the content in Memory due to this exception. Fixed: emilk#2768 (eframe: "App quit unexpectedly" on macOS) Signed-off-by: pan93412 <pan93412@gmail.com>
09c0e2a to
e472929
Compare
pan93412
added a commit
to pan93412/review-tool
that referenced
this pull request
Jun 4, 2023
run_return twice on Windows
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The approach of #1889 may remove observers in a view twice, which produces the Obj-C Exception:
The above message can only be seen when attaching the application to debugger. Users normally see:
This commit fixes it by only running
event_loop.run_return()twice on Windows. Besides:ControlFlow::ExitonEvent::LoopDestroyed,EventResult::Exitand on error; therefore, it is safe to not callingset_exit().Fixed: #2768 (eframe: "App quit unexpectedly" on macOS)
Exception Details
2023-06-04 13:01:02.034869+0800 review-tool[31446:18023641] [Window] Warning: Window WinitWindow 0x102536e60 ordered front from a non-active application and may order beneath the active application's windows. 2023-06-04T05:01:07.146383Z DEBUG eframe::native::epi_integration: Received WindowEvent::CloseRequested 2023-06-04T05:01:07.146439Z DEBUG eframe::native::epi_integration: App::on_close_event returned true 2023-06-04T05:01:07.146456Z DEBUG eframe::native::run: Asking to exit event loop… 2023-06-04T05:01:07.241007Z DEBUG eframe::native::run: Received Event::LoopDestroyed - saving app state… 2023-06-04T05:01:07.241041Z DEBUG eframe::native::run: eframe window closed 2023-06-04 13:01:34.963635+0800 review-tool[31446:18023641] [General] Cannot remove an observer <_NSTouchBarFinderObservation 0x10247fbb0> for the key path "nextResponder" from because it is not registered as an observer. 2023-06-04 13:01:35.012630+0800 review-tool[31446:18023641] [General] ( 0 CoreFoundation 0x00000001a1953154 __exceptionPreprocess + 176 1 libobjc.A.dylib 0x00000001a14724d4 objc_exception_throw + 60 2 Foundation 0x00000001a2846ff0 -[NSObject(NSKeyValueObserverRegistration) _removeObserver:forProperty:] + 628 3 Foundation 0x00000001a2846d28 -[NSObject(NSKeyValueObserverRegistration) removeObserver:forKeyPath:] + 136 4 Foundation 0x00000001a28469f4 -[NSObject(NSKeyValueObserverRegistration) removeObserver:forKeyPath:context:] + 196 5 AppKit 0x00000001a50b2e90 -[_NSTouchBarFinderObservation invalidate] + 264 6 AppKit 0x00000001a50b41f0 ___NSTouchBarFinderSetNeedsUpdateOnMain_block_invoke_2 + 628 7 AppKit 0x00000001a4ba0c30 NSDisplayCycleObserverInvoke + 168 8 AppKit 0x00000001a4ba088c NSDisplayCycleFlush + 644 9 QuartzCore 0x00000001a8dbdce4 _ZN2CA11Transaction19run_commit_handlersE18CATransactionPhase + 120 10 QuartzCore 0x00000001a8dbcaa0 _ZN2CA11Transaction6commitEv + 320 11 AppKit 0x00000001a4c22c7c __62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke + 272 12 AppKit 0x00000001a52fef7c ___NSRunLoopObserverCreateWithHandler_block_invoke + 64 13 CoreFoundation 0x00000001a18d99f0 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 36 14 CoreFoundation 0x00000001a18d98dc __CFRunLoopDoObservers + 532 15 CoreFoundation 0x00000001a18d8f14 __CFRunLoopRun + 776 16 CoreFoundation 0x00000001a18d84b8 CFRunLoopRunSpecific + 612 17 HIToolbox 0x00000001ab122c40 RunCurrentEventLoopInMode + 292 18 HIToolbox 0x00000001ab1228d0 ReceiveNextEventCommon + 220 19 HIToolbox 0x00000001ab1227d4 _BlockUntilNextEventMatchingListInModeWithFilter + 76 20 AppKit 0x00000001a4af9d44 _DPSNextEvent + 636 21 AppKit 0x00000001a4af8ee0 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 716 22 AppKit 0x00000001a4aed344 -[NSApplication run] + 464 23 review-tool 0x00000001003b3e74 _ZN61_$LT$$LP$$RP$$u20$as$u20$objc2..message..MessageArguments$GT$8__invoke17he1b0068f4ccdd175E + 52 24 review-tool 0x00000001003ad79c _ZN5objc27message8platform15send_unverified28_$u7b$$u7b$closure$u7d$$u7d$17hb7029ac0f15e9fc8E + 40 25 review-tool 0x00000001003a74cc _ZN115_$LT$core..panic..unwind_safe..AssertUnwindSafe$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$$LP$$RP$$GT$$GT$9call_once17hfc492e0857bda5aaE + 40 26 review-tool 0x00000001003a3e04 _ZN5objc29exception5catch28_$u7b$$u7b$closure$u7d$$u7d$17h0ba94ebdb44d74d0E + 44 27 review-tool 0x00000001003a22f4 _ZN5objc29exception10try_no_ret24try_objc_execute_closure17ha01724ca680604beE + 76 28 review-tool 0x00000001003c429c rust_objc_sys_0_2_try_catch_exception + 36 29 review-tool 0x00000001003a07ac _ZN5objc29exception10try_no_ret17h7ffc4f7f826f0b25E + 192 30 review-tool 0x00000001003a3cec _ZN5objc29exception5catch17hf8d41ca8a06b1454E + 72 31 review-tool 0x00000001003b1c50 _ZN5objc27message15conditional_try17h6aa27d5efbaaf4baE + 52 32 review-tool 0x00000001003acfec _ZN5objc27message8platform15send_unverified17hb5c1345ce99f3ed5E + 80 33 review-tool 0x0000000100371640 _ZN5objc27message15MessageReceiver12send_message17h848695ab0cd168f7E + 384 34 review-tool 0x0000000100374150 _ZN5winit13platform_impl8platform6appkit11application13NSApplication3run17h6c17518f765dd74aE + 76 35 review-tool 0x0000000100152a84 _ZN5winit13platform_impl8platform10event_loop18EventLoop$LT$T$GT$10run_return28_$u7b$$u7b$closure$u7d$$u7d$17h03b98465f5880858E + 344 36 review-tool 0x000000010015cc50 _ZN5objc22rc11autorelease15autoreleasepool17h21343e13671112ecE + 132 37 review-tool 0x000000010015274c _ZN5winit13platform_impl8platform10event_loop18EventLoop$LT$T$GT$10run_return17h14e950aef9284697E + 252 38 review-tool 0x0000000100156898 _ZN108_$LT$winit..event_loop..EventLoop$LT$T$GT$$u20$as$u20$winit..platform..run_return..EventLoopExtRunReturn$GT$10run_return17h48966b4c910ded19E + 24 39 review-tool 0x00000001001595ac _ZN6eframe6native3run14run_and_return17h506c088691f93430E + 644 40 review-tool 0x0000000100167c08 _ZN6eframe6native3run16glow_integration8run_glow28_$u7b$$u7b$closure$u7d$$u7d$17ha2f679311e869152E + 112 41 review-tool 0x0000000100159284 _ZN6eframe6native3run15with_event_loop28_$u7b$$u7b$closure$u7d$$u7d$17h5cd8d569d08431afE + 328 42 review-tool 0x000000010014a7dc _ZN3std6thread5local17LocalKey$LT$T$GT$8try_with17h20e8fd7b588891fbE + 368 43 review-tool 0x000000010014a2dc _ZN3std6thread5local17LocalKey$LT$T$GT$4with17h246bd912206bfd9dE + 36 44 review-tool 0x0000000100159130 _ZN6eframe6native3run15with_event_loop17h83ef53edb3b5d8e5E + 96 45 review-tool 0x0000000100167a4c _ZN6eframe6native3run16glow_integration8run_glow17h13efab21927196e5E + 180 46 review-tool 0x0000000100178150 _ZN6eframe10run_native17h66eb1ea1fb564bb8E + 444 47 review-tool 0x0000000100011c00 _ZN11review_tool4main17h1cb3b8d076b76f8fE + 944 48 review-tool 0x0000000100006aa0 _ZN4core3ops8function6FnOnce9call_once17h4b691ff2c5ef1de1E + 20 49 review-tool 0x0000000100002dd4 _ZN3std10sys_common9backtrace28__rust_begin_short_backtrace17h2ee91cdb29921988E + 24 50 review-tool 0x000000010001b8b8 _ZN3std2rt10lang_start28_$u7b$$u7b$closure$u7d$$u7d$17h165a9106e93a887cE + 28 51 review-tool 0x0000000100624118 _ZN3std2rt19lang_start_internal17hd0038fc73979f110E + 648 52 review-tool 0x000000010001b884 _ZN3std2rt10lang_start17hc2f7452d664ffbaaE + 84 53 review-tool 0x0000000100011c98 main + 36 54 dyld 0x00000001a14a3f28 start + 2236 )