Open duckbytes opened 1 year ago
0.16 is said to have a significant API change (I haven't checked if it's actually the case yet), so it would take some time before I can update the code base to the new API.
For the time being I recommend downgrading to 0.15.
That makes sense. Thanks for the response.
I've been able to downgrade back to 0.15.1, but now I'm getting a segmentation fault:
➜ picom-xrdesktop-companion git:(next) pacman -Qs gxr
local/gxr-git 0.15.1.983.27da712-1
A glib wrapper for the OpenVR and OpenXR APIs.
local/jxrlib 0.2.4-1
Open source implementation of jpegxr
➜ picom-xrdesktop-companion git:(next) pacman -Qs xrdesktop
local/gnome-shell-extension-xrdesktop-git 0.16.0.37.6124c8c-1
An extension for toggling xrdesktop mode in GNOME Shell.
local/xrdesktop-git 0.15.1.864.fda9b23-1
A library for XR interaction with classical desktop compositors.
➜ picom-xrdesktop-companion git:(next) pacman -Qs gulkan
local/gulkan-git 0.15.1.300.f39526a-1
A GLib library for Vulkan abstraction.
➜ picom-xrdesktop-companion git:(next) target/release/picom-xrdesktop-companion
ClientMode::Overlay
Load manifest path /home/theo/.cache/xrdesktop.openvr/actions.json
[1] 218538 segmentation fault (core dumped) target/release/picom-xrdesktop-companion
➜ picom-xrdesktop-companion git:(next)
Any thoughts about what might be going wrong?
is there a stack trace?
Attached is the full strace output, but here are the last few lines copied too:
poll([{fd=47, events=POLLIN}], 1, -1) = 1 ([{fd=47, revents=POLLIN}])
recvmsg(47, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\1\0\7\0\0\0\0\0D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", iov_len=4096}], msg_iovlen=1, msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_CMSG_CLOEXEC) = 32
recvmsg(47, {msg_namelen=0}, MSG_CMSG_CLOEXEC) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x56153730c5c8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7fdc341ff000
mprotect(0x7fdc34200000, 2097152, PROT_READ|PROT_WRITE) = 0
rt_sigprocmask(SIG_BLOCK, ~[], [], 8) = 0
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7fdc343ff990, parent_tid=0x7fdc343ff990, exit_signal=0, stack=0x7fdc341ff000, stack_size=0x1ffc40, tls=0x7fdc343ff6c0} => {parent_tid=[314154]}, 88) = 314154
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 1, NULL, FUTEX_BITSET_MATCH_ANY) = 0
mmap(NULL, 2101248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7fdc0ebfd000
mprotect(0x7fdc0ebfe000, 2097152, PROT_READ|PROT_WRITE) = 0
rt_sigprocmask(SIG_BLOCK, ~[], [], 8) = 0
clone3({flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, child_tid=0x7fdc0edfd990, parent_tid=0x7fdc0edfd990, exit_signal=0, stack=0x7fdc0ebfd000, stack_size=0x1ffc40, tls=0x7fdc0edfd6c0} => {parent_tid=[314161]}, 88) = 314161
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
sendmsg(3, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="l\1\0\1\0\0\0\0\2\0\0\0\254\0\0\0\1\1o\0 \0\0\0/com/git"..., iov_len=192}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 192
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 2, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e514d8, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 3, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x7fdc5d496ba0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 4, NULL, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 5, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 6, NULL, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 7, NULL, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 8, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 9, NULL, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 10, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 11, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 12, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 13, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 14, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 15, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 16, NULL, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 17, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 18, NULL, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 19, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 20, NULL, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 21, NULL, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 22, NULL, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 23, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 24, NULL, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 25, NULL, FUTEX_BITSET_MATCH_ANY) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x7fdc5d496ba0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7fdc5d496ba0, FUTEX_WAIT_PRIVATE, 2, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x7fdc5d496ba0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 26, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 27, NULL, FUTEX_BITSET_MATCH_ANY) = 0
futex(0x561536e515a0, FUTEX_WAIT_BITSET_PRIVATE, 28, NULL, FUTEX_BITSET_MATCH_ANY) = ?
+++ killed by SIGSEGV (core dumped) +++
@duckbytes thanks, but i was asking for a stack trace :sweat_smile:
How can I get that for you?
run the program under gdb
, use the backtrace
command when it crashes.
Thanks. Here's the output:
Thread 13 "picom-xrdesktop" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffc31fe6c0 (LWP 48479)]
0x00007fffc18b093c in ?? () from /usr/lib/dri/radeonsi_dri.so
(gdb) backtrace
#0 0x00007fffc18b093c in () at /usr/lib/dri/radeonsi_dri.so
#1 0x00007fffc1161e5e in () at /usr/lib/dri/radeonsi_dri.so
#2 0x00007fffc114742d in () at /usr/lib/dri/radeonsi_dri.so
#3 0x00007fffc13cf1d9 in () at /usr/lib/dri/radeonsi_dri.so
#4 0x00007fffc13cf96e in () at /usr/lib/dri/radeonsi_dri.so
#5 0x00007fffc13b742a in () at /usr/lib/dri/radeonsi_dri.so
#6 0x00007fffc12d9148 in () at /usr/lib/dri/radeonsi_dri.so
#7 0x00007fffc12d952d in () at /usr/lib/dri/radeonsi_dri.so
#8 0x00007fffc1383158 in () at /usr/lib/dri/radeonsi_dri.so
#9 0x00005555556fec78 in glium::buffer::alloc::Alloc::new ()
#10 0x000055555573bf11 in picom_xrdesktop_companion::gl::GlInner::blit ()
#11 0x0000555555761735 in core::ops::function::FnOnce::call_once{{vtable.shim}} ()
#12 0x0000555555788d44 in picom_xrdesktop_companion::utils::RemoteInner<T>::run ()
#13 0x00005555556ecfc4 in std::sys_common::backtrace::__rust_begin_short_backtrace ()
#14 0x00005555556fb119 in core::ops::function::FnOnce::call_once{{vtable.shim}} ()
#15 0x00005555558847a5 in alloc::boxed::{impl#44}::call_once<(), dyn core::ops::function::FnOnce<(), Output=()>, alloc::alloc::Global> () at library/alloc/src/boxed.rs:1951
#16 alloc::boxed::{impl#44}::call_once<(), alloc::boxed::Box<dyn core::ops::function::FnOnce<(), Output=()>, alloc::alloc::Global>, alloc::alloc::Global> ()
at library/alloc/src/boxed.rs:1951
#17 std::sys::unix::thread::{impl#2}::new::thread_start ()
at library/std/src/sys/unix/thread.rs:108
#18 0x00007ffff77398fd in start_thread (arg=<optimized out>) at pthread_create.c:442
#19 0x00007ffff77bba60 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
(gdb)
hmm, this doesn't look good :cry:
do you have valgrind
installed? can you run the application under valgrind
?
I've found the problem. Seeing all these errors about radeonsi_dri.so, I remembered that a few days ago I had installed mesa-git from the AUR. I replaced it with mesa from the repository and vulkan-radeon (mesa-git had removed it automatically). Now things are working again!
For reference this was the output from valgrind:
==81697== Memcheck, a memory error detector
==81697== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==81697== Using Valgrind-3.19.0 and LibVEX; rerun with -h for copyright info
==81697== Command: target/release/picom-xrdesktop-companion
==81697==
ClientMode::Overlay
Load manifest path /home/theo/.cache/xrdesktop.openvr/actions.json
==81697== Thread 12:
==81697== Invalid read of size 8
==81697== at 0x18A5693C: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x18307E5D: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x182ED42C: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x185751D8: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x1857596D: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x1855D429: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x1847F147: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x1847F52C: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x18529157: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x2B2C77: glium::buffer::alloc::Alloc::new (in /home/theo/git/picom-xrdesktop-companion/target/release/picom-xrdesktop-companion)
==81697== by 0x2EFF10: picom_xrdesktop_companion::gl::GlInner::blit (in /home/theo/git/picom-xrdesktop-companion/target/release/picom-xrdesktop-companion)
==81697== by 0x315734: core::ops::function::FnOnce::call_once{{vtable.shim}} (in /home/theo/git/picom-xrdesktop-companion/target/release/picom-xrdesktop-companion)
==81697== Address 0x8 is not stack'd, malloc'd or (recently) free'd
==81697==
==81697==
==81697== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==81697== Access not within mapped region at address 0x8
==81697== at 0x18A5693C: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x18307E5D: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x182ED42C: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x185751D8: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x1857596D: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x1855D429: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x1847F147: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x1847F52C: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x18529157: ??? (in /usr/lib/dri/radeonsi_dri.so)
==81697== by 0x2B2C77: glium::buffer::alloc::Alloc::new (in /home/theo/git/picom-xrdesktop-companion/target/release/picom-xrdesktop-companion)
==81697== by 0x2EFF10: picom_xrdesktop_companion::gl::GlInner::blit (in /home/theo/git/picom-xrdesktop-companion/target/release/picom-xrdesktop-companion)
==81697== by 0x315734: core::ops::function::FnOnce::call_once{{vtable.shim}} (in /home/theo/git/picom-xrdesktop-companion/target/release/picom-xrdesktop-companion)
==81697== If you believe this happened as a result of a stack
==81697== overflow in your program's main thread (unlikely but
==81697== possible), you can try to increase the size of the
==81697== main thread stack using the --main-stacksize= flag.
==81697== The main thread stack size used in this run was 8388608.
==81697==
==81697== HEAP SUMMARY:
==81697== in use at exit: 21,202,514 bytes in 75,661 blocks
==81697== total heap usage: 212,080 allocs, 136,419 frees, 418,678,492 bytes allocated
==81697==
==81697== LEAK SUMMARY:
==81697== definitely lost: 158 bytes in 6 blocks
==81697== indirectly lost: 304 bytes in 5 blocks
==81697== possibly lost: 6,651,919 bytes in 49,028 blocks
==81697== still reachable: 14,506,101 bytes in 26,278 blocks
==81697== of which reachable via heuristic:
==81697== stdstring : 82,203 bytes in 1,636 blocks
==81697== multipleinheritance: 4,512 bytes in 12 blocks
==81697== suppressed: 0 bytes in 0 blocks
==81697== Rerun with --leak-check=full to see details of leaked memory
==81697==
==81697== For lists of detected and suppressed errors, rerun with: -s
==81697== ERROR SUMMARY: 2 errors from 1 contexts (suppressed: 0 from 0)
[1] 81697 segmentation fault (core dumped) valgrind target/release/picom-xrdesktop-companion
The mesa-git version I had installed was 23.0.0_devel.162796.88f1fad3f76.d41d8cd98f00b204e9800998ecf8427e-1
Thank you for your help!
Unfortunately it looks like mesa has caught up in the repositories, because I'm getting segfaults again.
#2 0x00007fffbe14816d in () at /usr/lib/dri/radeonsi_dri.so [21/156]
#3 0x00007fffbe3d0409 in () at /usr/lib/dri/radeonsi_dri.so
#4 0x00007fffbe3d0b9e in () at /usr/lib/dri/radeonsi_dri.so
#5 0x00007fffbe3b865a in () at /usr/lib/dri/radeonsi_dri.so
#6 0x00007fffbe2d9ed8 in () at /usr/lib/dri/radeonsi_dri.so
#7 0x00007fffbe2da2bd in () at /usr/lib/dri/radeonsi_dri.so
#8 0x00007fffbe383fe8 in () at /usr/lib/dri/radeonsi_dri.so
#9 0x00005555556fec78 in glium::buffer::alloc::Alloc::new ()
#10 0x000055555573bf11 in picom_xrdesktop_companion::gl::GlInner::blit ()
#11 0x0000555555761735 in core::ops::function::FnOnce::call_once{{vtable.shim}} ()
--Type <RET> for more, q to quit, c to continue without paging--
#12 0x0000555555788d44 in picom_xrdesktop_companion::utils::RemoteInner<T>::run ()
#13 0x00005555556ecfc4 in std::sys_common::backtrace::__rust_begin_short_backtrace ()
#14 0x00005555556fb119 in core::ops::function::FnOnce::call_once{{vtable.shim}} ()
#15 0x00005555558847a5 in alloc::boxed::{impl#44}::call_once<(), dyn core::ops::function::FnOnce<(), Output=()>, alloc::alloc::Global> () at library/alloc/src/boxed.rs:1951
#16 alloc::boxed::{impl#44}::call_once<(), alloc::boxed::Box<dyn core::ops::function::FnOnce<(), Output=()>, alloc::alloc::Global>, alloc::alloc::Global> () at library/alloc/src/boxed.rs:1951
#17 std::sys::unix::thread::{impl#2}::new::thread_start () at library/std/src/sys/unix/thread.rs:108
#18 0x00007ffff77448fd in () at /usr/lib/libc.so.6
#19 0x00007ffff77c6d20 in () at /usr/lib/libc.so.6
Looks like it's the same problem as before, but downgrading mesa breaks Gnome.
Sorry I didn't have time to look into this. I will try to look into the crash in the next a couple of days.
RE: 0.16 support
Unfortunately 0.16 moved to openxr and abandoned steamvr support. While steamvr does provide an openxr implementation, that doesn't support overlays. So I don't plan to support 0.16 until overlays are supported.
It's no problem. Thanks for looking into it.
I realised later too that 0.16 has dropped overlay support, so understand that it won't be ported over.
i might have fixed the problem, or at least i can't reproduce the crash on my side. can you test again with the new changes?
It works. Thanks so much!
xrdesktop-git, gxr-git and gulkan-git were all updated to 0.16 recently on the AUR.
The build binary I was using failed because it couldn't find a .so file on my system any more (think it was libxrdesktop-0.16.so, but I deleted the binary so I can't check again).
Trying to compile with cargo build --release gives this output:
Not sure if there is a workaround to build the app against the new versions.