YaLTeR / niri

A scrollable-tiling Wayland compositor.
https://matrix.to/#/#niri:matrix.org
GNU General Public License v3.0
2.82k stars 79 forks source link

Occasional panic when window closes #434

Open sullyj3 opened 3 weeks ago

sullyj3 commented 3 weeks ago

Niri occasionally panics when closing a window.

I'm not sure exactly how to repro. It's happened 3 or 4 times so far. So far I've only had it happen with wezterm, but that's the window I open and close most frequently.

journalctl --user -u niri --since "10 minutes ago" > niri.log ``` Jun 12 13:57:02 dorian niri[588410]: thread 'main' panicked at /home/james/.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-backend-0.3.3/src/sys/server_impl/mod.rs:1097:56: Jun 12 13:57:02 dorian niri[588410]: called `Result::unwrap()` on an `Err` value: InvalidId Jun 12 13:57:02 dorian niri[588410]: stack backtrace: Jun 12 13:57:02 dorian niri[588410]: 0: rust_begin_unwind Jun 12 13:57:02 dorian niri[588410]: at /rustc/36153f1a4e3162f0a143c7b3e468ecb3beb0008e/library/std/src/panicking.rs:652:5 Jun 12 13:57:02 dorian niri[588410]: 1: core::panicking::panic_fmt Jun 12 13:57:02 dorian niri[588410]: at /rustc/36153f1a4e3162f0a143c7b3e468ecb3beb0008e/library/core/src/panicking.rs:72:14 Jun 12 13:57:02 dorian niri[588410]: 2: core::result::unwrap_failed Jun 12 13:57:02 dorian niri[588410]: at /rustc/36153f1a4e3162f0a143c7b3e468ecb3beb0008e/library/core/src/result.rs:1658:5 Jun 12 13:57:02 dorian niri[588410]: 3: unwrap Jun 12 13:57:02 dorian niri[588410]: at /rustc/36153f1a4e3162f0a143c7b3e468ecb3beb0008e/library/core/src/result.rs:1081:23 Jun 12 13:57:02 dorian niri[588410]: 4: send_event Jun 12 13:57:02 dorian niri[588410]: 5: send_event Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-backend-0.3.3/src/sys/server_impl/mod.rs:579:9 Jun 12 13:57:02 dorian niri[588410]: 6: send_event Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-backend-0.3.3/src/sys/../server_api.rs:371:9 Jun 12 13:57:02 dorian niri[588410]: 7: send_event Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-server-0.31.1/src/display.rs:182:21 Jun 12 13:57:02 dorian niri[588410]: 8: send_event Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-server-0.31.1/src/lib.rs:123:5 Jun 12 13:57:02 dorian niri[588410]: 9: leave Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-server-0.31.1/src/lib.rs:123:5 Jun 12 13:57:02 dorian niri[588410]: 10: {closure#3} Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/git/checkouts/smithay-b5a338d5236320f6/fb44b24/src/wayland/seat/pointer.rs:194:13 Jun 12 13:57:02 dorian niri[588410]: 11: for_each_focused_pointers> Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/git/checkouts/smithay-b5a338d5236320f6/fb44b24/src/wayland/seat/pointer.rs:88:17 Jun 12 13:57:02 dorian niri[588410]: 12: leave Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/git/checkouts/smithay-b5a338d5236320f6/fb44b24/src/wayland/seat/pointer.rs:193:9 Jun 12 13:57:02 dorian niri[588410]: 13: replace Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/git/checkouts/smithay-b5a338d5236320f6/fb44b24/src/input/pointer/mod.rs:155:9 Jun 12 13:57:02 dorian niri[588410]: 14: motion Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/git/checkouts/smithay-b5a338d5236320f6/fb44b24/src/input/pointer/mod.rs:796:21 Jun 12 13:57:02 dorian niri[588410]: 15: motion Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/git/checkouts/smithay-b5a338d5236320f6/fb44b24/src/input/pointer/mod.rs:571:9 Jun 12 13:57:02 dorian niri[588410]: 16: motion Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/git/checkouts/smithay-b5a338d5236320f6/fb44b24/src/input/pointer/grab.rs:216:16 Jun 12 13:57:02 dorian niri[588410]: 17: {closure#0} Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/git/checkouts/smithay-b5a338d5236320f6/fb44b24/src/input/pointer/mod.rs:251:13 Jun 12 13:57:02 dorian niri[588410]: 18: with_grab> Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/git/checkouts/smithay-b5a338d5236320f6/fb44b24/src/input/pointer/mod.rs:897:17 Jun 12 13:57:02 dorian niri[588410]: 19: motion Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/git/checkouts/smithay-b5a338d5236320f6/fb44b24/src/input/pointer/mod.rs:250:9 Jun 12 13:57:02 dorian niri[588410]: 20: move_cursor Jun 12 13:57:02 dorian niri[588410]: at ./dev/niri/src/niri.rs:512:9 Jun 12 13:57:02 dorian niri[588410]: 21: move_cursor_to_rect Jun 12 13:57:02 dorian niri[588410]: at ./dev/niri/src/niri.rs:562:9 Jun 12 13:57:02 dorian niri[588410]: 22: move_cursor_to_focused_tile Jun 12 13:57:02 dorian niri[588410]: at ./dev/niri/src/niri.rs:588:18 Jun 12 13:57:02 dorian niri[588410]: 23: maybe_warp_cursor_to_focus Jun 12 13:57:02 dorian niri[588410]: at ./dev/niri/src/niri.rs:599:9 Jun 12 13:57:02 dorian niri[588410]: 24: toplevel_destroyed Jun 12 13:57:02 dorian niri[588410]: at ./dev/niri/src/handlers/xdg_shell.rs:482:13 Jun 12 13:57:02 dorian niri[588410]: 25: destroyed Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/git/checkouts/smithay-b5a338d5236320f6/fb44b24/src/wayland/shell/xdg/handlers/surface/toplevel.rs:160:13 Jun 12 13:57:02 dorian niri[588410]: 26: destroyed Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-server-0.31.1/src/dispatch.rs:367:17 Jun 12 13:57:02 dorian niri[588410]: 27: destroyed Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-server-0.31.1/src/dispatch.rs:292:9 Jun 12 13:57:02 dorian niri[588410]: 28: {closure#0} Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-backend-0.3.3/src/sys/server_impl/mod.rs:1610:13 Jun 12 13:57:02 dorian niri[588410]: 29: with<(alloc::sync::Arc, alloc::alloc::Global>, *mut core::ffi::c_void), wayland_backend::sys::server_impl::resource_destructor::{closure_env#0}, ()> Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/scoped-tls-1.0.1/src/lib.rs:171:13 Jun 12 13:57:02 dorian niri[588410]: 30: resource_destructor Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-backend-0.3.3/src/sys/server_impl/mod.rs:1607:9 Jun 12 13:57:02 dorian niri[588410]: 31: Jun 12 13:57:02 dorian niri[588410]: 32: wl_client_destroy Jun 12 13:57:02 dorian niri[588410]: 33: Jun 12 13:57:02 dorian niri[588410]: 34: wl_event_loop_dispatch Jun 12 13:57:02 dorian niri[588410]: 35: {closure#0} Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-backend-0.3.3/src/sys/server_impl/mod.rs:410:13 Jun 12 13:57:02 dorian niri[588410]: 36: set<(alloc::sync::Arc, alloc::alloc::Global>, *mut core::ffi::c_void), wayland_backend::sys::server_impl::{impl#21}::dispatch_all_clients::{closure_env#0}, i32> Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/scoped-tls-1.0.1/src/lib.rs:137:9 Jun 12 13:57:02 dorian niri[588410]: 37: dispatch_all_clients Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-backend-0.3.3/src/sys/server_impl/mod.rs:407:19 Jun 12 13:57:02 dorian niri[588410]: 38: dispatch_all_clients Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-backend-0.3.3/src/sys/../server_api.rs:575:9 Jun 12 13:57:02 dorian niri[588410]: 39: dispatch_clients Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/wayland-server-0.31.1/src/display.rs:59:22 Jun 12 13:57:02 dorian niri[588410]: 40: {closure#14} Jun 12 13:57:02 dorian niri[588410]: at ./dev/niri/src/niri.rs:1454:39 Jun 12 13:57:02 dorian niri[588410]: 41: {closure#0}, std::io::error::Error>, niri::niri::{impl#4}::new::{closure_env#14}> Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/calloop-0.13.0/src/sources/mod.rs:327:61 Jun 12 13:57:02 dorian niri[588410]: 42: process_events, std::io::error::Error, calloop::sources::{impl#4}::process_events::{closure_env#0}, std::io::error::Error>, niri::niri::{impl#4}::new::{closure_env#14}>> Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/calloop-0.13.0/src/sources/generic.rs:290:9 Jun 12 13:57:02 dorian niri[588410]: 43: process_events, std::io::error::Error>, niri::niri::{impl#4}::new::{closure_env#14}> Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/calloop-0.13.0/src/sources/mod.rs:326:9 Jun 12 13:57:02 dorian niri[588410]: 44: dispatch_events Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/calloop-0.13.0/src/loop_logic.rs:445:31 Jun 12 13:57:02 dorian niri[588410]: 45: dispatch> Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/calloop-0.13.0/src/loop_logic.rs:559:9 Jun 12 13:57:02 dorian niri[588410]: 46: run> Jun 12 13:57:02 dorian niri[588410]: at ./.cargo/registry/src/index.crates.io-6f17d22bba15001f/calloop-0.13.0/src/loop_logic.rs:596:13 Jun 12 13:57:02 dorian niri[588410]: 47: main Jun 12 13:57:02 dorian niri[588410]: at ./dev/niri/src/main.rs:261:5 Jun 12 13:57:02 dorian niri[588410]: 48: call_once core::result::Result<(), alloc::boxed::Box>, ()> Jun 12 13:57:02 dorian niri[588410]: at /rustc/36153f1a4e3162f0a143c7b3e468ecb3beb0008e/library/core/src/ops/function.rs:250:5 Jun 12 13:57:02 dorian niri[588410]: note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. Jun 12 13:57:02 dorian niri[588410]: 2024-06-12T03:57:02.904285Z DEBUG niri::utils::watcher: exiting watcher thread for /home/james/.config/niri/config.kdl Jun 12 13:57:03 dorian systemd[588286]: niri.service: Main process exited, code=exited, status=101/n/a Jun 12 13:57:03 dorian systemd[588286]: niri.service: Failed with result 'exit-code'. Jun 12 13:57:03 dorian systemd[588286]: niri.service: Consumed 5h 10min 18.075s CPU time, 2.5G memory peak, 310.8M memory swap peak. Jun 12 13:57:41 dorian systemd[588286]: Starting A scrollable-tiling Wayland compositor... Jun 12 13:57:41 dorian niri[2837004]: 2024-06-12T03:57:41.017278Z INFO niri: starting version 0.1.6 (d193f3e-modified) Jun 12 13:57:41 dorian niri[2837004]: 2024-06-12T03:57:41.036847Z DEBUG niri_config: loaded config from "/home/james/.config/niri/config.kdl" Jun 12 13:57:41 dorian niri[2837004]: 2024-06-12T03:57:41.058451Z INFO niri::backend::tty: using as the render node: "/dev/dri/renderD128" Jun 12 13:57:41 dorian niri[2837004]: 2024-06-12T03:57:41.077641Z DEBUG niri::backend::tty: device added: 57857 "/dev/dri/card1" Jun 12 13:57:41 dorian niri[2837004]: 2024-06-12T03:57:41.391232Z DEBUG niri::backend::tty: this is the primary node Jun 12 13:57:41 dorian niri[2837004]: 2024-06-12T03:57:41.391247Z DEBUG niri::backend::tty: this is the primary render node Jun 12 13:57:41 dorian niri[2837004]: 2024-06-12T03:57:41.546591Z DEBUG niri::backend::tty: device changed: 57857 Jun 12 13:57:42 dorian niri[2837004]: 2024-06-12T03:57:42.196642Z DEBUG niri::backend::tty: connecting connector: eDP-1 Jun 12 13:57:42 dorian niri[2837004]: 2024-06-12T03:57:42.196741Z DEBUG niri::backend::tty: picking mode: Mode { name: "1920x1080", clock: 142520, size: (1920, 1080), hsync: (1968, 2000, 2080), vsync: (1083, 1088, 1142), hskew: 0, vscan: 0, vrefresh: 60, mode_type: ModeTypeFlags(PREFERRED | DRIVER) } Jun 12 13:57:42 dorian niri[2837004]: 2024-06-12T03:57:42.196790Z DEBUG niri::backend::tty: set max bpc to 8 Jun 12 13:57:42 dorian niri[2837004]: 2024-06-12T03:57:42.207990Z DEBUG niri::niri: putting output eDP-1 at x=0 y=0 Jun 12 13:57:42 dorian niri[2837004]: 2024-06-12T03:57:42.208115Z INFO niri: listening on Wayland socket: wayland-1 Jun 12 13:57:42 dorian niri[2837004]: 2024-06-12T03:57:42.208126Z INFO niri: IPC listening on: /run/user/1000/niri.wayland-1.2837004.sock Jun 12 13:57:42 dorian systemd[588286]: niri.service: Got notification message from PID 2837056, but reception only permitted for main PID 2837004 Jun 12 13:57:42 dorian systemd[588286]: Started A scrollable-tiling Wayland compositor. Jun 12 13:57:42 dorian niri[2837004]: libinput error: client bug: timer event7 hold: scheduled expiry is in the past (-611ms), your system is too slow ```

System Information

sullyj3 commented 3 weeks ago

The log indicates it crashes at the pointer.motion() call:

pub fn move_cursor(&mut self, location: Point<f64, Logical>) {
    let under = self.niri.surface_under_and_global_space(location);
    self.niri
        .maybe_activate_pointer_constraint(location, &under);
    self.niri.pointer_focus.clone_from(&under);

    let pointer = &self.niri.seat.get_pointer().unwrap();
    pointer.motion(
        self,
        under.surface,
        &MotionEvent {
            location,
            serial: SERIAL_COUNTER.next_serial(),
            time: get_monotonic_time().as_millis() as u32,
        },
    );
    pointer.frame(self);

    // We moved the pointer, show it.
    self.niri.pointer_hidden = false;

    // FIXME: granular
    self.niri.queue_redraw_all();
}

Is this a smithay bug?

YaLTeR commented 3 weeks ago

Uhh, huh. I guess it's trying to send leave to the just-destroyed surface? This might be a Smithay bug, yeah, probably worth bringing it up there.