Skip to content

Crash when closing window on macOS if "exception" feature of objc crate is enabled #1925

@aclysma

Description

@aclysma

I have revision 0152508 which includes 4192d04

This is an example program that crashes when I close the window if I enable the "exception" feature in objc in an upstream crate.

Example program:

use winit::window::WindowBuilder;
use winit::event_loop::{EventLoop, ControlFlow};
use winit::event::{WindowEvent, Event};

fn main() {
    let event_loop = EventLoop::new();
    let window = WindowBuilder::new()
        .with_title("Winit GL Example")
        .build(&event_loop)
        .unwrap();

    event_loop.run(move |event, _, control_flow| {
        *control_flow = ControlFlow::Wait;

        match event {
            Event::WindowEvent {
                event: WindowEvent::CloseRequested,
                ..
            } => {
                *control_flow = ControlFlow::Exit
            },
            _ => (),
        }
    });
}

If the upstream crate has objc = { version = "0.2.7", features = [] }, I get:

    Finished dev [unoptimized + debuginfo] target(s) in 0.07s
     Running `/Users/pmd/dev/rust/rafx/target/debug/demo-web`

Process finished with exit code 0

If the upstream crate has objc = { version = "0.2.7", features = ["exception"] }, I get:

    Finished dev [unoptimized + debuginfo] target(s) in 0.07s
     Running `/Users/pmd/dev/rust/rafx/target/debug/demo-web`
thread 'main' panicked at 'Uncaught exception <NSException: 0x13875b6b0>', /Users/pmd/.cargo/git/checkouts/winit-c2fdb27092aba5a7/0152508/src/platform_impl/macos/app_state.rs:418:38
stack backtrace:
   0:        0x1003e1948 - std::backtrace_rs::backtrace::libunwind::trace::h6635c546760c01d7
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/../../backtrace/src/backtrace/libunwind.rs:90:5
   1:        0x1003e1948 - std::backtrace_rs::backtrace::trace_unsynchronized::h1672fde63351961a
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:        0x1003e1948 - std::sys_common::backtrace::_print_fmt::h55998ee5d5c4bd49
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/sys_common/backtrace.rs:67:5
   3:        0x1003e1948 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hcdaace98b5f99f33
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/sys_common/backtrace.rs:46:22
   4:        0x1003f8e70 - core::fmt::write::h4e46426f9591205d
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/core/src/fmt/mod.rs:1096:17
   5:        0x1003dfa74 - std::io::Write::write_fmt::hd71db88d6aa1df24
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/io/mod.rs:1568:15
   6:        0x1003e34d4 - std::sys_common::backtrace::_print::heada759bfede9436
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/sys_common/backtrace.rs:49:5
   7:        0x1003e34d4 - std::sys_common::backtrace::print::ha4efc73542d9f131
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/sys_common/backtrace.rs:36:9
   8:        0x1003e34d4 - std::panicking::default_hook::{{closure}}::h744546d1495ac83a
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panicking.rs:208:50
   9:        0x1003e306c - std::panicking::default_hook::hfa180b571e8756b1
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panicking.rs:225:9
  10:        0x1003e3a88 - std::panicking::rust_panic_with_hook::h0ba91efd9a619f41
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panicking.rs:591:17
  11:        0x1003e3664 - std::panicking::begin_panic_handler::{{closure}}::h016fbcc3b9442b8a
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panicking.rs:497:13
  12:        0x1003e1e00 - std::sys_common::backtrace::__rust_end_short_backtrace::h7d78c8c5fa9da52e
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/sys_common/backtrace.rs:141:18
  13:        0x1003e35cc - rust_begin_unwind
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panicking.rs:493:5
  14:        0x1003fe7a8 - std::panicking::begin_panic_fmt::h0dcaad6c5f4c2062
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panicking.rs:435:5
  15:        0x1003bebf4 - winit::platform_impl::platform::app_state::AppState::cleared::h1f48d06f964251af
                               at /Users/pmd/.cargo/git/checkouts/winit-c2fdb27092aba5a7/0152508/src/platform_impl/macos/app_state.rs:418:38
  16:        0x1003aab4c - winit::platform_impl::platform::observer::control_flow_end_handler::{{closure}}::h85fb36b172d6be74
                               at /Users/pmd/.cargo/git/checkouts/winit-c2fdb27092aba5a7/0152508/src/platform_impl/macos/observer.rs:180:21
  17:        0x1003aab4c - winit::platform_impl::platform::observer::control_flow_handler::{{closure}}::hd235d9b9c5d2ab91
                               at /Users/pmd/.cargo/git/checkouts/winit-c2fdb27092aba5a7/0152508/src/platform_impl/macos/observer.rs:142:57
  18:        0x1003aab4c - std::panicking::try::do_call::h951bb30cb678b752
                               at /Users/pmd/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:379:40
  19:        0x1003aab4c - std::panicking::try::h93fbd09ee4c6b942
                               at /Users/pmd/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:343:19
  20:        0x1003bafa8 - std::panic::catch_unwind::hdf036a1b3b433ae8
                               at /Users/pmd/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/panic.rs:431:14
  21:        0x1003bafa8 - winit::platform_impl::platform::event_loop::stop_app_on_panic::h4e2291db06d7832d
                               at /Users/pmd/.cargo/git/checkouts/winit-c2fdb27092aba5a7/0152508/src/platform_impl/macos/event_loop.rs:216:11
  22:        0x1003bafa8 - winit::platform_impl::platform::observer::control_flow_handler::hd2bf5a07dcba8002
                               at /Users/pmd/.cargo/git/checkouts/winit-c2fdb27092aba5a7/0152508/src/platform_impl/macos/observer.rs:142:5
  23:        0x1003bafa8 - winit::platform_impl::platform::observer::control_flow_end_handler::h648829a59608beeb
                               at /Users/pmd/.cargo/git/checkouts/winit-c2fdb27092aba5a7/0152508/src/platform_impl/macos/observer.rs:175:9
  24:        0x18213be08 - <unknown>
  25:        0x18213bc54 - <unknown>
  26:        0x18213b2cc - <unknown>
  27:        0x18213a740 - <unknown>
  28:        0x189c5f5c4 - <unknown>
  29:        0x189c5f3f4 - <unknown>
  30:        0x189c5f124 - <unknown>
  31:        0x18491482c - <unknown>
  32:        0x1849131ac - <unknown>
  33:        0x184905060 - <unknown>
  34:        0x10039c114 - <() as objc::message::MessageArguments>::invoke::h6286c7ce32f4c09d
                               at /Users/pmd/.cargo/registry/src/github.com-1ecc6299db9ec823/objc-0.2.7/src/message/mod.rs:128:17
  35:        0x100397c6c - objc::message::platform::send_unverified::{{closure}}::h0088050509d12dc1
                               at /Users/pmd/.cargo/registry/src/github.com-1ecc6299db9ec823/objc-0.2.7/src/message/apple/mod.rs:27:9
  36:        0x1003979e0 - objc_exception::try::{{closure}}::hcb64eb2140e7da6b
                               at /Users/pmd/.cargo/registry/src/github.com-1ecc6299db9ec823/objc_exception-0.1.2/src/lib.rs:68:31
  37:        0x100397754 - objc_exception::try_no_ret::try_objc_execute_closure::he8c4448c34b73b2a
                               at /Users/pmd/.cargo/registry/src/github.com-1ecc6299db9ec823/objc_exception-0.1.2/src/lib.rs:34:9
  38:        0x1003ca88c - RustObjCExceptionTryCatch
                               at /Users/pmd/.cargo/registry/src/github.com-1ecc6299db9ec823/objc_exception-0.1.2/extern/exception.m:10:9
  39:        0x1003975c0 - objc_exception::try_no_ret::h3b618a4a207c2dcc
                               at /Users/pmd/.cargo/registry/src/github.com-1ecc6299db9ec823/objc_exception-0.1.2/src/lib.rs:44:19
  40:        0x1003977a4 - objc_exception::try::h15b1eedfec00da0a
                               at /Users/pmd/.cargo/registry/src/github.com-1ecc6299db9ec823/objc_exception-0.1.2/src/lib.rs:67:9
  41:        0x10038f734 - objc::exception::try::h03744f11d97e9ddf
                               at /Users/pmd/.cargo/registry/src/github.com-1ecc6299db9ec823/objc-0.2.7/src/exception.rs:8:5
  42:        0x100397bec - objc::message::platform::send_unverified::h6588f321d315149c
                               at /Users/pmd/.cargo/registry/src/github.com-1ecc6299db9ec823/objc-0.2.7/src/message/apple/mod.rs:26:5
  43:        0x10039c63c - objc::message::send_message::h7fc07c0b48f54a01
                               at /Users/pmd/.cargo/registry/src/github.com-1ecc6299db9ec823/objc-0.2.7/src/message/mod.rs:178:5
  44:        0x10039c63c - winit::platform_impl::platform::event_loop::EventLoop<T>::run_return::hc294edcd72d493aa
                               at /Users/pmd/.cargo/git/checkouts/winit-c2fdb27092aba5a7/0152508/src/platform_impl/macos/event_loop.rs:177:22
  45:        0x10039c944 - winit::platform_impl::platform::event_loop::EventLoop<T>::run::h3dbacf74ec1ddd0a
                               at /Users/pmd/.cargo/git/checkouts/winit-c2fdb27092aba5a7/0152508/src/platform_impl/macos/event_loop.rs:144:9
  46:        0x10038b4ec - winit::event_loop::EventLoop<T>::run::he354ecf260eb1fab
                               at /Users/pmd/.cargo/git/checkouts/winit-c2fdb27092aba5a7/0152508/src/event_loop.rs:154:9
  47:        0x10039825c - demo_web::main::hdbed489825f1103a
                               at /Users/pmd/dev/rust/rafx/demo-web/src/main.rs:12:5
  48:        0x100392ad4 - core::ops::function::FnOnce::call_once::h1ed192840ea3824d
                               at /Users/pmd/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
  49:        0x100396a54 - std::sys_common::backtrace::__rust_begin_short_backtrace::hd06b1d01be8f330c
                               at /Users/pmd/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:125:18
  50:        0x100399260 - std::rt::lang_start::{{closure}}::h4a2c4dc5ec6263ff
                               at /Users/pmd/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/rt.rs:66:18
  51:        0x1003e3ed0 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::hb03d0568d6ae0a69
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/core/src/ops/function.rs:259:13
  52:        0x1003e3ed0 - std::panicking::try::do_call::h472ada61894622d1
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panicking.rs:379:40
  53:        0x1003e3ed0 - std::panicking::try::h61df800e825c9f48
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panicking.rs:343:19
  54:        0x1003e3ed0 - std::panic::catch_unwind::hfa0b663d404e5c5e
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panic.rs:431:14
  55:        0x1003e3ed0 - std::rt::lang_start_internal::hbc1be5b0e12e91fd
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/rt.rs:51:25
  56:        0x100399238 - std::rt::lang_start::h68cea686ad89f163
                               at /Users/pmd/.rustup/toolchains/stable-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/rt.rs:65:5
  57:        0x1003982f0 - _main

Process finished with exit code 101

It is crashing on this line:

image

Any ideas? Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    B - bugDang, that shouldn't have happenedC - needs investigationIssue must be confirmed and researchedDS - appkitAffects the AppKit/macOS backend

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions