Crash when enabling audio
I'm not sure that this is a bug as I'm not totally confident with my implementation, so pardon me if this is wrong.
I'm implementing a plugin for Remmina using gtk-vnc, I took most of the code from the gvncviewer, vinagre and virt-viewer.
When a sound is emitted on the remote server, my plugin crashes really badly:
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:20.518: ../src/vncconnection.c Emit audio action 1
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:20.518: ../src/vncconnection.c Audio action main context 1
[New Thread 0x7fffdcaff640 (LWP 746393)]
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:20.585: ../src/vncconnection.c Audio tick 21328
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:20.636: ../src/vncconnection.c Audio tick 17800
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:20.687: ../src/vncconnection.c Audio tick 21376
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:20.747: ../src/vncconnection.c Audio tick 17800
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:20.798: ../src/vncconnection.c Audio tick 17832
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:20.849: ../src/vncconnection.c Audio tick 17864
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:20.899: ../src/vncconnection.c Audio tick 21392
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:20.960: ../src/vncconnection.c Audio tick 17856
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:21.011: ../src/vncconnection.c Audio tick 21344
(org.remmina.Remmina:745853): gtk-vnc-DEBUG: 11:45:21.070: ../src/vncconnection.c Audio tick 17776
Thread 1 "remmina" received signal SIGSEGV, Segmentation fault.
0x00007fffebcfb7d6 in vnc_connection_server_message (conn=0xf8c350) at ../src/vncconnection.c:3743
3743 priv->audio_sample->length += n_length;
Missing separate debuginfos, use: dnf debuginfo-install alsa-lib-1.2.4-5.fc33.x86_64 at-spi2-atk-2.38.0-1.fc33.x86_64 at-spi2-core-2.38.0-2.fc33.x86_64 atk-2.36.0-2.fc33.x86_64 avahi-glib-0.8-7.fc33.x86_64 avahi-libs-0.8-7.fc33.x86_64 avahi-ui-gtk3-0.8-7.fc33.x86_64 bzip2-libs-1.0.8-4.fc33.x86_64 cairo-1.16.0-9.fc33.x86_64 cups-libs-2.3.3op2-5.fc33.x86_64 cyrus-sasl-lib-2.1.27-6.fc33.x86_64 dbus-libs-1.12.20-2.fc33.x86_64 elfutils-libelf-0.183-1.fc33.x86_64 elfutils-libs-0.183-1.fc33.x86_64 enchant2-2.2.14-1.fc33.x86_64 faac-1.30-4.fc33.x86_64 ffmpeg-libs-4.3.2-2.fc33.x86_64 flac-libs-1.3.3-4.fc33.x86_64 fontconfig-2.13.92-12.fc33.x86_64 freetype-2.10.4-1.fc33.x86_64 fribidi-1.0.10-3.fc33.x86_64 gdbm-libs-1.19-1.fc33.x86_64 gdk-pixbuf2-2.42.6-1.fc33.x86_64 glib2-2.66.8-1.fc33.x86_64 gmp-6.2.0-5.fc33.x86_64 gnutls-3.6.15-1.fc33.x86_64 gstreamer1-1.18.2-1.fc33.x86_64 gstreamer1-plugins-base-1.18.2-1.fc33.x86_64 gtk3-3.24.29-1.fc33.x86_64 harfbuzz-2.7.2-1.fc33.x86_64 harfbuzz-icu-2.7.2-1.fc33.x86_64 hyphen-2.8.8-14.fc33.x86_64 json-glib-1.6.2-1.fc33.x86_64 kde-gtk-config-5.20.5-1.fc33.x86_64 keyutils-libs-1.6.1-1.fc33.x86_64 kf5-kconfig-core-5.79.0-3.fc33.x86_64 kf5-kwallet-libs-5.79.0-2.fc33.x86_64 kf5-kwindowsystem-5.79.0-2.fc33.x86_64 krb5-libs-1.18.2-29.fc33.x86_64 lame-libs-3.100-9.fc33.x86_64 libICE-1.0.10-4.fc33.x86_64 libSM-1.2.3-6.fc33.x86_64 libX11-1.6.12-3.fc33.x86_64 libXau-1.0.9-4.fc33.x86_64 libXcomposite-0.4.5-3.fc33.x86_64 libXcursor-1.2.0-3.fc33.x86_64 libXdamage-1.1.5-3.fc33.x86_64 libXext-1.3.4-4.fc33.x86_64 libXfixes-5.0.3-12.fc33.x86_64 libXi-1.7.10-4.fc33.x86_64 libXinerama-1.1.4-6.fc33.x86_64 libXrandr-1.5.2-4.fc33.x86_64 libappindicator-gtk3-12.10.0-29.fc33.x86_64 libbrotli-1.0.9-3.fc33.x86_64 libcacard-2.7.0-5.fc33.x86_64 libcom_err-1.45.6-4.fc33.x86_64 libdatrie-0.2.9-12.fc33.x86_64 libdav1d-0.7.1-2.fc33.x86_64 libdbusmenu-gtk3-16.04.0-16.fc33.x86_64 libdrm-2.4.102-2.fc33.x86_64 libepoxy-1.5.5-1.fc33.x86_64 libffi-3.1-26.fc33.x86_64 libgcrypt-1.8.7-1.fc33.x86_64 libglvnd-1.3.3-1.fc33.x86_64 libglvnd-egl-1.3.3-1.fc33.x86_64 libglvnd-glx-1.3.3-1.fc33.x86_64 libgomp-10.3.1-1.fc33.x86_64 libgpg-error-1.41-1.fc33.x86_64 libicu-67.1-4.fc33.x86_64 libidn2-2.3.0-4.fc33.x86_64 libjpeg-turbo-2.0.5-5.fc33.x86_64 libmount-2.36.1-1.fc33.x86_64 libnghttp2-1.43.0-1.fc33.x86_64 libnotify-0.7.9-3.fc33.x86_64 libpsl-0.21.1-2.fc33.x86_64 librsvg2-2.50.3-1.fc33.x86_64 libseccomp-2.5.0-3.fc33.x86_64 libselinux-3.1-2.fc33.x86_64 libsodium-1.0.18-6.fc33.x86_64 libsoup-2.72.0-3.fc33.x86_64 libssh-0.9.5-1.fc33.x86_64 libstdc++-10.3.1-1.fc33.x86_64 libtasn1-4.16.0-3.fc33.x86_64 libthai-0.1.28-5.fc33.x86_64 libunistring-0.9.10-9.fc33.x86_64 libunwind-1.4.0-4.fc33.x86_64 libuuid-2.36.1-1.fc33.x86_64 libva-2.9.0-1.fc33.x86_64 libvmaf-1.5.1-5.fc33.x86_64 libwayland-client-1.18.0-2.fc33.x86_64 libwebp-1.2.0-1.fc33.x86_64 libwpe-1.8.0-1.fc33.x86_64 libxcrypt-4.4.20-1.fc33.x86_64 libxkbcommon-1.0.1-1.fc33.x86_64 libxml2-2.9.10-8.fc33.x86_64 libxslt-1.1.34-4.fc33.x86_64 libzstd-1.4.9-1.fc33.x86_64 lzo-2.10-3.fc33.x86_64 nettle-3.6-3.fc33.x86_64 nss-util-3.63.0-1.fc33.x86_64 ocl-icd-2.3.0-1.fc33.x86_64 opencore-amr-0.1.5-11.fc33.x86_64 openldap-2.4.50-5.fc33.x86_64 openssl-libs-1.1.1k-1.fc33.x86_64 pango-1.48.4-1.fc33.x86_64 pcre-8.44-2.fc33.x86_64 pcre2-10.36-4.fc33.x86_64 pixman-0.40.0-2.fc33.x86_64 pulseaudio-libs-14.0-2.fc33.x86_64 qt5-qtx11extras-5.15.2-2.fc33.x86_64 rav1e-libs-0.4.0~alpha-0.1.fc33.x86_64 soxr-0.1.3-8.fc33.x86_64 speex-1.2.0-6.fc33.x86_64 systemd-libs-246.13-1.fc33.x86_64 usbredir-0.9.0-1.fc33.x86_64 vte291-0.62.3-2.fc33.x86_64 vulkan-loader-1.2.148.1-1.fc33.x86_64 webkit2gtk3-2.32.0-1.fc33.x86_64 woff2-1.0.2-9.fc33.x86_64 x264-libs-0.160-2.20200702gitcde9a93.fc33.x86_64 x265-libs-3.4-3.fc33.x86_64 xcb-util-keysyms-0.4.0-14.fc33.x86_64 xvidcore-1.3.7-4.fc33.x86_64 xz-libs-5.2.5-4.fc33.x86_64 zvbi-0.2.35-11.fc33.x86_64
(gdb) bt full
#0 0x00007fffebcfb7d6 in vnc_connection_server_message (conn=0xf8c350) at ../src/vncconnection.c:3743
n_subtype = <optimized out>
n_length = 3568
n_type = 1 '\001'
priv = 0xf88760
msg = 255 '\377'
ret = <optimized out>
conn = <optimized out>
priv = <optimized out>
ret = <optimized out>
s =
{conn = 0xf8c350, caller = 0xf88760, signum = 17, params = {cursor = 0x0, absPointer = 0, text = 0x0, ledstate = 0, area = {x = 0, y = 0, width = 0, height = 0}, size = {width = 0, height = 0}, pixelFormat = 0x0, authReason = 0x0, authUnsupported = 0, authCred = 0x0, authTypes = 0x0, message = 0x0, powerStatus = 0}}
#1 vnc_connection_coroutine (opaque=<optimized out>) at ../src/vncconnection.c:6016
conn = <optimized out>
priv = <optimized out>
ret = <optimized out>
s =
{conn = 0xf8c350, caller = 0xf88760, signum = 17, params = {cursor = 0x0, absPointer = 0, text = 0x0, ledstate = 0, area = {x = 0, y = 0, width = 0, height = 0}, size = {width = 0, height = 0}, pixelFormat = 0x0, authReason = 0x0, authUnsupported = 0, authCred = 0x0, authTypes = 0x0, message = 0x0, powerStatus = 0}}
#2 0x00007fffebcfd9bb in coroutine_trampoline (cc=0xf88790) at ../src/coroutine_ucontext.c:60
co = 0xf88760
#3 0x00007ffff67d70b0 in __start_context () at ../sysdeps/unix/sysv/linux/x86_64/__start_context.S:91
#4 0x0000000000f88b78 in ()
#5 0x0000000000000000 in ()
Let me know if you need more symbols and which one if it's possible.
The code I used it's quite straight forward
// During initialization
gpdata->vnc = vnc_display_new();
if (remmina_plugin_service->file_get_int(remminafile, "enableaudio", FALSE))
gpdata->pa = vnc_audio_pulse_new();
// When the vnc-initialized signal is emitted
gpdata->conn = vnc_display_get_connection(VNC_DISPLAY(gpdata->vnc));
VncAudioFormat format = {
VNC_AUDIO_FORMAT_RAW_S32,
2,
44100,
};
if (remmina_plugin_service->file_get_int(remminafile, "enableaudio", FALSE)) {
vnc_connection_set_audio_format(gpdata->conn, &format);
vnc_connection_set_audio(gpdata->conn, VNC_AUDIO(gpdata->pa));
vnc_connection_audio_enable(gpdata->conn);
}
The Remote host is an Ubuntu 21.04 KVM (created with virt-manager) I used the latest commit from gtk-vnc master branch, on a Fedora 33
Pulse audio packages:
pulseaudio-utils-14.0-2.fc33.x86_64
pulseaudio-module-gsettings-14.0-2.fc33.x86_64
cros-pulse-config-1.0-0.39.20200806git19eab9e.fc33.noarch
pulseaudio-module-gconf-14.0-2.fc33.x86_64
pulseaudio-module-bluetooth-14.0-2.fc33.x86_64
alsa-plugins-pulseaudio-1.2.2-4.fc33.x86_64
pulseaudio-qt-1.2-4.fc33.x86_64
pulseaudio-libs-glib2-14.0-2.fc33.x86_64
pulseaudio-module-x11-14.0-2.fc33.x86_64
pulseaudio-libs-devel-14.0-2.fc33.x86_64
alsa-plugins-pulseaudio-1.2.2-4.fc33.i686
pulseaudio-libs-14.0-2.fc33.x86_64
pulseaudio-14.0-2.fc33.x86_64
pulseaudio-libs-14.0-2.fc33.i686
pulseeffects-4.8.5-1.fc33.x86_64
gvnc and gtk-vnc packages installed on Fedora:
gvnc-1.0.0-3.fc33.x86_64
gvnc-devel-1.0.0-3.fc33.x86_64
gvncpulse-1.0.0-3.fc33.x86_64
gvncpulse-devel-1.0.0-3.fc33.x86_64
gtk-vnc2-1.0.0-3.fc33.x86_64
gtk-vnc2-devel-1.0.0-3.fc33.x86_64
Edited by Antenore Gatta