Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MacOs - Putting System to Sleep / Suspending Causes MonitorHandle::uuid to panic #4166

Open
Braymatter opened this issue Mar 17, 2025 · 3 comments · May be fixed by #4167
Open

MacOs - Putting System to Sleep / Suspending Causes MonitorHandle::uuid to panic #4166

Braymatter opened this issue Mar 17, 2025 · 3 comments · May be fixed by #4167
Assignees
Labels
B - bug Dang, that shouldn't have happened DS - macos

Comments

@Braymatter
Copy link

Description

Originally created here: bevyengine/bevy#17827

I had my game running and my laptop went to sleep for a couple hours. When I logged back in the app panicked with the following message:

thread 'main' panicked at /Users/caylebray/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/core-foundation-0.9.4/src/uuid.rs:27:1:
Attempted to create a NULL object.

Anecdotally, after resuming my app on ios after a long time it pauses for a bit and crashes, so it could be related.

Rust Backtrace:

2025-03-12T08:42:24.523314Z  INFO physiboids::ship::auto_spawn_player_n: Spawning player 1
2025-03-12T08:42:24.545897Z  INFO physiboids::gui::egui_ui: Margins changed, updating viewport: UiMargins { left: 276.0, right: 0.0, top: 0.0, bottom: 0.0 }
2025-03-12T08:42:24.545934Z  INFO physiboids::gui::egui_ui: Setting viewport to UVec2(3561, 1900) UVec2(38, 0)
2025-03-12T08:42:41.742840Z  INFO bevy_winit::system: Monitor removed 74v1#4294967370
2025-03-12T08:42:41.742864Z  INFO bevy_winit::system: Monitor removed 75v1#4294967371
thread 'main' panicked at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/core-foundation-0.9.4/src/uuid.rs:27:1:
Attempted to create a NULL object.
stack backtrace:
   0: std::panicking::begin_panic
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:737:5
   1: <core_foundation::uuid::CFUUID as core_foundation::base::TCFType>::wrap_under_create_rule
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/core-foundation-0.9.4/src/lib.rs:110:17
   2: winit::platform_impl::macos::monitor::MonitorHandle::uuid
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/monitor.rs:110:13
   3: winit::platform_impl::macos::monitor::MonitorHandle::ns_screen::{{closure}}
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/monitor.rs:326:21
   4: core::iter::traits::iterator::Iterator::find::check::{{closure}}
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs:2829:20
   5: core::iter::traits::iterator::Iterator::try_fold
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs:2370:21
   6: core::iter::traits::iterator::Iterator::find
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs:2833:9
   7: winit::platform_impl::macos::monitor::MonitorHandle::ns_screen
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/monitor.rs:323:9
   8: winit::platform_impl::macos::monitor::MonitorHandle::scale_factor::{{closure}}
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/monitor.rs:230:19
   9: objc2_foundation::thread::run_on_main
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-foundation-0.2.2/src/thread.rs:113:9
  10: winit::platform_impl::macos::monitor::MonitorHandle::scale_factor
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/monitor.rs:229:9
  11: winit::platform_impl::macos::monitor::MonitorHandle::size
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/monitor.rs:215:77
  12: winit::monitor::MonitorHandle::size
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/monitor.rs:119:9
  13: bevy_winit::system::create_monitors
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_winit-0.15.2/src/system.rs:173:20
  14: <bevy_winit::state::WinitAppRunnerState<T> as winit::application::ApplicationHandler<T>>::about_to_wait
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_winit-0.15.2/src/state.rs:446:9
  15: winit::event_loop::dispatch_event_for_app
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/event_loop.rs:647:31
  16: winit::event_loop::EventLoop<T>::run_app::{{closure}}
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/event_loop.rs:265:49
  17: winit::platform_impl::macos::event_loop::map_user_event::{{closure}}
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/event_loop.rs:174:22
  18: <alloc::boxed::Box<F,A> as core::ops::function::FnMut<Args>>::call_mut
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/alloc/src/boxed.rs:1979:9
  19: winit::platform_impl::macos::event_handler::EventHandler::handle_event
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/event_handler.rs:125:17
  20: winit::platform_impl::macos::app_state::ApplicationDelegate::handle_event
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/app_state.rs:322:9
  21: winit::platform_impl::macos::app_state::ApplicationDelegate::cleared
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/app_state.rs:390:9
  22: winit::platform_impl::macos::observer::control_flow_end_handler::{{closure}}
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/observer.rs:84:21
  23: winit::platform_impl::macos::observer::control_flow_handler::{{closure}}
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/observer.rs:46:9
  24: std::panicking::try::do_call
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:557:40
  25: ___rust_try
  26: std::panicking::try
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:520:19
  27: std::panic::catch_unwind
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panic.rs:358:14
  28: winit::platform_impl::macos::event_loop::stop_app_on_panic
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/event_loop.rs:432:11
  29: winit::platform_impl::macos::observer::control_flow_handler
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/observer.rs:44:5
  30: winit::platform_impl::macos::observer::control_flow_end_handler
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/observer.rs:79:9
  31: <unknown>
  34: <unknown>
  35: <unknown>
  36: <unknown>
  37: <unknown>
  38: <unknown>
  39: <unknown>
  40: <unknown>
  41: <() as objc2::encode::EncodeArguments>::__invoke
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.5.2/src/encode.rs:437:26
  42: objc2::runtime::message_receiver::msg_send_primitive::send
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.5.2/src/runtime/message_receiver.rs:173:18
  43: objc2::runtime::message_receiver::MessageReceiver::send_message
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.5.2/src/runtime/message_receiver.rs:433:38
  44: objc2::__macro_helpers::msg_send::MsgSend::send_message
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.5.2/src/__macro_helpers/msg_send.rs:27:31
  45: objc2_app_kit::generated::__NSApplication::NSApplication::run
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.5.2/src/macros/extern_methods.rs:247:14
  46: winit::platform_impl::macos::event_loop::EventLoop<T>::run_on_demand::{{closure}}::{{closure}}
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/event_loop.rs:303:26
  47: objc2::rc::autorelease::autoreleasepool
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/objc2-0.5.2/src/rc/autorelease.rs:438:15
  48: winit::platform_impl::macos::event_loop::EventLoop<T>::run_on_demand::{{closure}}
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/event_loop.rs:289:13
  49: winit::platform_impl::macos::event_handler::EventHandler::set
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/event_handler.rs:98:9
  50: winit::platform_impl::macos::app_state::ApplicationDelegate::set_event_handler
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/app_state.rs:191:9
  51: winit::platform_impl::macos::event_loop::EventLoop<T>::run_on_demand
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/event_loop.rs:288:9
  52: winit::platform_impl::macos::event_loop::EventLoop<T>::run
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/platform_impl/macos/event_loop.rs:275:9
  53: winit::event_loop::EventLoop<T>::run_app
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/winit-0.30.9/src/event_loop.rs:265:9
  54: bevy_winit::state::winit_runner
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_winit-0.15.2/src/state.rs:862:23
  55: core::ops::function::FnOnce::call_once
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
  56: core::ops::function::FnOnce::call_once{{vtable.shim}}
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
  57: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/alloc/src/boxed.rs:1972:9
  58: bevy_app::app::App::run
             at /Users/rj/.cargo/registry/src/index.crates.io-6f17d22bba15001f/bevy_app-0.15.2/src/app.rs:170:9
  59: physiboids::main
             at ./src/main.rs:93:5
  60: core::ops::function::FnOnce::call_once
             at /Users/rj/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Device and iOS version

Macbook Pro M3 Max

Winit version

0.30.9

@Braymatter Braymatter added B - bug Dang, that shouldn't have happened DS - ios labels Mar 17, 2025
@Braymatter Braymatter changed the title iOS/MacOs - Putting System to Sleep / Suspending Causes MonitorHandle::uuid to panic MacOs - Putting System to Sleep / Suspending Causes MonitorHandle::uuid to panic Mar 17, 2025
@alice-i-cecile
Copy link

I suspect that what's happening here is winit is attempting to assign a UUID to each monitor, and generating and using up a new one even on failure due to the monitor being asleep. This depletes the supply of UUIDs (in addition to wasting work), leading to an eventual panic.

I'm not familiar with this code though: this is just informed speculation from an upstream maintainer <3

@madsmtm
Copy link
Member

madsmtm commented Mar 17, 2025

I think rather the issue is that we call CGDisplayCreateUUIDFromDisplayID all the time, instead of caching it.

Maybe we should just have two fields on MonitorHandle (CGDirectDisplayID and CFRetained<CFUUID>)?

Or actually, why are we even storing the CGDirectDisplayID in the first place? Maybe we should just only store the UUID, and use CGDisplayGetDisplayIDFromUUID whenever we need to perform an operation on the display?

@madsmtm
Copy link
Member

madsmtm commented Mar 17, 2025

CGDirectDisplayID seems to explicitly state that it's "a framebuffer, a color correction (gamma) table, and possibly an attached monitor".

So it does sound like using just the UUID in MonitorHandle would be the correct thing to do.

@madsmtm madsmtm self-assigned this Mar 17, 2025
@madsmtm madsmtm linked a pull request Mar 17, 2025 that will close this issue
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
B - bug Dang, that shouldn't have happened DS - macos
Development

Successfully merging a pull request may close this issue.

3 participants