FDH2 / UxPlay

AirPlay Unix mirroring server
GNU General Public License v3.0
1.34k stars 71 forks source link

segfault on alpine #263

Closed wenerme closed 5 months ago

wenerme commented 5 months ago
apk add git gcc g++ make cmake openssl-dev avahi-dev gstreamer-dev gst-plugins-base-dev gst-libav gst-plugins-good libplist-dev

git clone https://github.com/FDH2/UxPlay
cd UxPlay
mkdir build
cd build
cmake ..
make
./uxplay

dmesg

[ 6141.266521] Fusion Dispatch[5715]: segfault at 10024 ip 00007f68ec394f04 sp 00007f68ec371510 error 4 in libfusion-1.7.so.7.0.0[7f68ec394000+5000] likely on CPU 1 (core 1, socket 0)
[ 6141.266554] Code: 8b 3c 24 ff 15 35 80 00 00 48 83 bd 58 04 00 00 00 75 10 48 8b 34 24 48 8d bd f8 03 00 00 e8 b0 ff ff ff 48 8b b5 58 04 00 00 <83> be 24 00 01 00 00 8b 96 1c 00 01 00 8b 86 20 00 01 00 74 0b 48

libfusion come from this https://github.com/deniskropp/DirectFB ?

strace output

read(15, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
mmap(NULL, 143360, PROT_READ, MAP_PRIVATE, 15, 0) = 0x7fce3ac6a000
mmap(0x7fce3ac72000, 61440, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 15, 0x8000) = 0x7fce3ac72000
mmap(0x7fce3ac81000, 36864, PROT_READ, MAP_PRIVATE|MAP_FIXED, 15, 0x17000) = 0x7fce3ac81000
mmap(0x7fce3ac8a000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 15, 0x1f000) = 0x7fce3ac8a000
mmap(0x7fce3ac8c000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fce3ac8c000
close(15)                               = 0
open("/lib/libfusion-1.7.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libfusion-1.7.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libfusion-1.7.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
fcntl(15, F_SETFD, FD_CLOEXEC)          = 0
fstat(15, {st_mode=S_IFREG|0755, st_size=59288, ...}) = 0
read(15, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
mmap(NULL, 61440, PROT_READ, MAP_PRIVATE, 15, 0) = 0x7fce3ac5b000
mmap(0x7fce3ac60000, 20480, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 15, 0x5000) = 0x7fce3ac60000
mmap(0x7fce3ac65000, 12288, PROT_READ, MAP_PRIVATE|MAP_FIXED, 15, 0xa000) = 0x7fce3ac65000
mmap(0x7fce3ac68000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 15, 0xd000) = 0x7fce3ac68000
close(15)                               = 0
mprotect(0x7fce3ada4000, 4096, PROT_READ) = 0
mprotect(0x7fce3ad8a000, 36864, PROT_READ) = 0
mprotect(0x7fce3ac8a000, 4096, PROT_READ) = 0
mprotect(0x7fce3ac68000, 4096, PROT_READ) = 0
dup(2)                                  = 15
rt_sigaction(SIGSEGV, {sa_handler=0x7fce43b428f0, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fce44367ea8}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fce44367ea8}, 8) = 0
futex(0x7fce43ab3e68, FUTEX_WAKE_PRIVATE, 2147483647) = 0
rt_sigaction(SIGSEGV, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fce44367ea8}, NULL, 8) = 0
futex(0x7fce43ab3e68, FUTEX_WAKE_PRIVATE, 2147483647) = 0
futex(0x7fce3ada7390, FUTEX_WAKE_PRIVATE, 2147483647) = 0
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fce3ac58000
access("/dev/dri/card0", W_OK)          = 0
geteuid()                               = 0
open("/etc/directfbrc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/root/.directfbrc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/etc/directfbrc.-", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/root/.directfbrc.-", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
gettid()                                = 5453
prctl(PR_GET_NAME, "uxplay")            = 0
open("/usr/lib/libdirectfb-1.7.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 16
fcntl(16, F_SETFD, FD_CLOEXEC)          = 0
fstat(16, {st_mode=S_IFREG|0755, st_size=1088400, ...}) = 0
close(16)                               = 0
open("/usr/lib/directfb-1.7-7/systems", O_RDONLY|O_LARGEFILE|O_CLOEXEC|O_DIRECTORY) = 16
fcntl(16, F_SETFD, FD_CLOEXEC)          = 0
getdents64(16, 0x7fce3adde958 /* 5 entries */, 2048) = 176
open("/usr/lib/directfb-1.7-7/systems/libdirectfb_fbdev.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 17
fcntl(17, F_SETFD, FD_CLOEXEC)          = 0
fstat(17, {st_mode=S_IFREG|0755, st_size=55544, ...}) = 0
read(17, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
mmap(NULL, 61440, PROT_READ, MAP_PRIVATE, 17, 0) = 0x7fce3ac49000
mmap(0x7fce3ac4c000, 28672, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 17, 0x3000) = 0x7fce3ac4c000
mmap(0x7fce3ac53000, 12288, PROT_READ, MAP_PRIVATE|MAP_FIXED, 17, 0xa000) = 0x7fce3ac53000
mmap(0x7fce3ac56000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 17, 0xc000) = 0x7fce3ac56000
close(17)                               = 0
mprotect(0x7fce3ac56000, 4096, PROT_READ) = 0
open("/usr/lib/directfb-1.7-7/systems/libdirectfb_dummy.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 17
fcntl(17, F_SETFD, FD_CLOEXEC)          = 0
fstat(17, {st_mode=S_IFREG|0755, st_size=14504, ...}) = 0
read(17, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
mmap(NULL, 20480, PROT_READ, MAP_PRIVATE, 17, 0) = 0x7fce3ac44000
mmap(0x7fce3ac45000, 4096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 17, 0x1000) = 0x7fce3ac45000
mmap(0x7fce3ac46000, 4096, PROT_READ, MAP_PRIVATE|MAP_FIXED, 17, 0x2000) = 0x7fce3ac46000
mmap(0x7fce3ac47000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 17, 0x2000) = 0x7fce3ac47000
close(17)                               = 0
mprotect(0x7fce3ac47000, 4096, PROT_READ) = 0
open("/usr/lib/directfb-1.7-7/systems/libdirectfb_devmem.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 17
fcntl(17, F_SETFD, FD_CLOEXEC)          = 0
fstat(17, {st_mode=S_IFREG|0755, st_size=18360, ...}) = 0
read(17, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
mmap(NULL, 24576, PROT_READ, MAP_PRIVATE, 17, 0) = 0x7fce3ac3e000
mmap(0x7fce3ac3f000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 17, 0x1000) = 0x7fce3ac3f000
mmap(0x7fce3ac41000, 4096, PROT_READ, MAP_PRIVATE|MAP_FIXED, 17, 0x3000) = 0x7fce3ac41000
mmap(0x7fce3ac42000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 17, 0x3000) = 0x7fce3ac42000
close(17)                               = 0
mprotect(0x7fce3ac42000, 4096, PROT_READ) = 0
getdents64(16, 0x7fce3adde958 /* 0 entries */, 2048) = 0
close(16)                               = 0
mmap(NULL, 512020, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fce3abc0000
mmap(NULL, 512020, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fce3ab42000
munmap(0x7fce3abc0000, 516096)          = 0
munmap(0x7fce3ab42000, 516096)          = 0
sched_get_priority_min(SCHED_OTHER)     = 0
sched_get_priority_min(SCHED_OTHER)     = 0
sched_get_priority_max(SCHED_OTHER)     = 0
mmap(NULL, 143360, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fce3ac1b000
mprotect(0x7fce3ac1d000, 135168, PROT_READ|PROT_WRITE) = 0
rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1 RT_2], [], 8) = 0
clone(child_stack=0x7fce3ac3d5b8, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID|0x400000, parent_tid=[5458], tls=0x7fce3ac3db30, child_tidptr=0x7fce443bbf70) = 5458
sched_setscheduler(5458, SCHED_OTHER, [0]) = 0
futex(0x7fce3ac3d5d0, FUTEX_WAKE_PRIVATE, 1) = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
futex(0x7fce3ae15acc, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7ffd807d1154, FUTEX_WAIT_PRIVATE, 2, NULL) = -1 EAGAIN (Resource temporarily unavailable)
mmap(NULL, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fce3ac13000
gettid()                                = 5453
rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1 RT_2], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
munmap(0x7fce3ac13000, 32768)           = 0
futex(0x7fce3ac3d4b4, FUTEX_WAKE_PRIVATE, 1) = 1
+++ killed by SIGSEGV +++
Segmentation fault

My desktop setup https://github.com/wenerme/wener/blob/master/story/2021/2021-02-26-alpinelinux-setup-xfce.md

fduncanh commented 5 months ago

what are you trying to do with https://github.com/deniskropp/DirectFB ?

what sort of system are you running (why are you using the framebuffer video)

what does "ldd ./uxplay" show it is linked to?

what is LibFusion for?

?????

I dont see anything connected to uxplay in the trace

fduncanh commented 5 months ago

If you are trying to use the framebuffer for some strange reason (no desktop no X11) use KMS

./uxplay -vs kmssink

gstreamer has a fbdevsink but I think its deprecated.

again: WHY use framebuffer video???? is this some embedded system, not X86_64?

wenerme commented 5 months ago

seems the directfb is introduced by using qemu, tring to test this in vm, no segfault in real box.

when start uxplay by ssh session, will cause the segfault, maybe video not init or somthing, start uxplay under logined startx session is ok.


but when using uxplay in lightdm autologin +xface, after boot up, connect uxplay will cause lightdm session crash, after relogin by password, the connect is ok, but nothing show up

image


ldd

/lib/ld-musl-x86_64.so.1 (0x7f2a58567000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x7f2a583d6000)
libplist-2.0.so.4 => /usr/lib/libplist-2.0.so.4 (0x7f2a583c0000)
libcrypto.so.3 => /lib/libcrypto.so.3 (0x7f2a57e00000)
libdns_sd.so.1 => /usr/lib/libdns_sd.so.1 (0x7f2a583b6000)
libgstvideo-1.0.so.0 => /usr/lib/libgstvideo-1.0.so.0 (0x7f2a582f2000)
libgstapp-1.0.so.0 => /usr/lib/libgstapp-1.0.so.0 (0x7f2a582dd000)
libgstreamer-1.0.so.0 => /usr/lib/libgstreamer-1.0.so.0 (0x7f2a57cb5000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x7f2a58280000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x7f2a57b69000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7f2a57800000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x7f2a5825c000)
libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f2a58567000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x7f2a58235000)
libavahi-client.so.3 => /usr/lib/libavahi-client.so.3 (0x7f2a58225000)
libavahi-common.so.3 => /usr/lib/libavahi-common.so.3 (0x7f2a57b5c000)
libgstbase-1.0.so.0 => /usr/lib/libgstbase-1.0.so.0 (0x7f2a57ad5000)
liborc-0.4.so.0 => /usr/lib/liborc-0.4.so.0 (0x7f2a57782000)
libintl.so.8 => /usr/lib/libintl.so.8 (0x7f2a57ac3000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x7f2a5821e000)
libffi.so.8 => /usr/lib/libffi.so.8 (0x7f2a57ab9000)
libpcre2-8.so.0 => /usr/lib/libpcre2-8.so.0 (0x7f2a576db000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x7f2a57ab4000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x7f2a57aac000)
libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x7f2a57696000)
libbsd.so.0 => /usr/lib/libbsd.so.0 (0x7f2a57a99000)
libmd.so.0 => /usr/lib/libmd.so.0 (0x7f2a57688000)
fduncanh commented 5 months ago

I am not sure what you are trying to do. What kind of system do you want to have? an X11 desktop or something else?

ldd shows that uxplay does not link to direcfb

presumably gstrreamer selected dfbvideosink for some reason?

see https://gstreamer.freedesktop.org/documentation/directfb/index.html?gi-language=c

To get more info, try

export GST_DEBUG=4 ./uxplay -d

to see what is going on.

have you tried ./uxplay -d -vs xvimagesink or ./uxplay -d -vs waylandsink
or ./uxplay -d -vs glimagesink ?

wenerme commented 5 months ago

glimagesink works, thanks

wenerme commented 5 months ago

My setup flow is here https://github.com/wenerme/wener/blob/master/notes/os/linux/desktop/uxplay.md , but -fs not works for glimagesink 😞

fduncanh commented 5 months ago

yes, glimagesink does not support full screen. waylandsink does.

framebuffer video with kmssink works (used on raspberrypi without X11) your issues with dfbvideosink are gstreamer issues on alpine

wenerme commented 5 months ago

ximagesink is works too, seems autovideosink choose xvimagesink.

ximagesink use less cpu than glimagesink(about 20% of glimagesink), works with -fs.