russelltg / wl-screenrec

High performance wlroots screen recording, featuring hardware encoding
Apache License 2.0
320 stars 9 forks source link

Crash on FreeBSD #99

Open jbeich opened 1 week ago

jbeich commented 1 week ago

Regressed by a1599ee3a12a. Other zwp_linux_dmabuf_v1 consumers like mpv --vo=dmabuf-wayland work fine.

$ uname -a
FreeBSD 141amd64-default 14.1-RELEASE-p6 FreeBSD 14.1-RELEASE-p6 amd64

$ pkg info -x ffmpeg libva mesa sway
ffmpeg-6.1.2_5,1
libva-2.22.0
libva-intel-driver-2.4.1_3
libva-intel-hybrid-driver-1.0.2_3
mesa-dri-24.1.7_1
mesa-libs-24.1.7_1
sway-1.10
swaybg-1.2.1
swayidle-1.8.0_1

$ wayland-info | fgrep dmabuf
interface: 'zwp_linux_dmabuf_v1',                        version:  4, name:  2
interface: 'zwlr_export_dmabuf_manager_v1',              version:  1, name: 27

$ RUST_BACKTRACE=1 wl-screenrec
thread 'main' panicked at src/cap_wlr_screencopy.rs:96:62:
called `Result::unwrap()` on an `Err` value: [57, 1, 0, 0, 0, 0, 0, 0]
stack backtrace:
   0: rust_begin_unwind
   1: core::panicking::panic_fmt
   2: core::result::unwrap_failed
   3: wayland_client::event_queue::queue_callback
   4: wayland_client::event_queue::EventQueue<State>::dispatching_impl
   5: wl_screenrec::main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
russelltg commented 1 week ago

Interesting, apparently dev_t isn't 8 bytes on BSD?

jbeich commented 1 week ago

dev_t is 8 bytes since 2009 on NetBSD >= 6, since 2017 on FreeBSD >= 12 but remains 4 bytes on DragonFly and OpenBSD. Unfortunately, Rust fossilized 4-byte dev_t on FreeBSD.