gtk apps all crash during: GdkWindow unexpectedly destroyed
This crash happens every single time I sleep with gtk themes enabled.
Steps to reproduce
- Generated a Gentoo chroot in ChromeOS dev mode
- install sommelier from
- run sommelier and start something like geany.
- Sleep the machine && Wake the machine. geany window is still up.
- Install gtk theme and configure (emerge lxappearance should do the trick.)
- Restart Sommelier and start something like geany.
- Sleep the machine && Wake the machine.
- geany window has now crashed.
chronos@localhost ~ $ geany
(geany:23346): Gdk-WARNING **: 11:33:18.206: GdkWindow 0x400007 unexpectedly destroyed
Gdk-Message: 11:33:18.272: geany: Fatal IO error 0 (Success) on X server :0.
Version information
ls /var/db/pkg/*
/var/db/pkg/x11-libs:
cairo-1.16.0-r4 libX11-1.6.12 libXfixes-5.0.3-r2 libxshmfence-1.3-r1
gdk-pixbuf-2.40.0 libXau-1.0.9 libXfont2-2.0.4 libXt-1.2.0
gtk+-2.24.32-r1 libXaw-1.0.13-r2 libXi-1.7.10 libXxf86vm-1.1.4-r2
gtk+-3.24.22 libxcb-1.14 libxkbcommon-1.0.1-r1 pango-1.42.4-r2
libdrm-2.4.102 libXcomposite-0.4.5 libxkbfile-1.1.0 pixman-0.40.0
libfontenc-1.1.4 libXcursor-1.2.0 libXmu-1.1.3 xtrans-1.4.0
libICE-1.0.10 libXdamage-1.1.5 libXpm-3.5.13
libpciaccess-0.16 libXdmcp-1.1.3 libXrandr-1.5.2
libSM-1.2.3-r1 libXext-1.3.4 libXrender-0.9.10-r2
/var/db/pkg/x11-misc:
shared-mime-info-2.0-r2 xbitmaps-1.1.2-r1 xkeyboard-config-2.31
util-macros-1.19.2-r2 xcb-2.4-r1
/var/db/pkg/x11-themes:
adwaita-icon-theme-3.36.1 gtk-engines-adwaita-3.28
gnome-themes-standard-3.28 hicolor-icon-theme-0.17
Warnings
Backtrace
Starting program: /usr/bin/geany
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
[New Thread 0x7ffff5e4e640 (LWP 16121)]
[New Thread 0x7ffff51bc640 (LWP 16122)]
[New Thread 0x7ffff49bb640 (LWP 16123)]
[Thread 0x7ffff49bb640 (LWP 16123) exited]
[Thread 0x7ffff51bc640 (LWP 16122) exited]
[New Thread 0x7ffff51bc640 (LWP 16380)]
[New Thread 0x7ffff49bb640 (LWP 16381)]
[Thread 0x7ffff49bb640 (LWP 16381) exited]
(geany:16115): Gdk-WARNING **: 12:21:02.437: GdkWindow 0x400007 unexpectedly destroyed
Gdk-Message: 12:21:02.643: geany: Fatal IO error 0 (Success) on X server :0.
[Thread 0x7ffff51bc640 (LWP 16380) exited]
[Thread 0x7ffff5e4e640 (LWP 16121) exited]
[Inferior 1 (process 16115) exited with code 01]
(gdb) bt
No stack.
This is the sommelier ebuild I am effectively using:
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=5
inherit flag-o-matic autotools-utils
DESCRIPTION="Sommelier works by redirecting X11 and Wayland programs to the built-in ChromeOS wayland server."
HOMEPAGE="https://chromium.googlesource.com/chromiumos/platform2/+/master/vm_tools"
SRC_URI="https://chromium.googlesource.com/chromiumos/platform2/+archive/HEAD/vm_tools.tar.gz"
LICENSE="BSD-Google"
SLOT="0"
KEYWORDS="*"
IUSE=""
MY_P="sommelier"
S="${WORKDIR}/${MY_P}"
DEPEND=""
RDEPEND="${DEPEND}
x11-base/xwayland
x11-libs/libxkbcommon
x11-libs/pixman
"
BDEPEND=""
src_unpack() {
default
mkdir -p ${S}/build/linux/
curl "https://chromium.googlesource.com/chromiumos/third_party/kernel/+/5d641a7b7b64664230d2fd2aa1e74dd792b8b7bf/include/uapi/linux/virtwl.h?format=TEXT" | base64 --decode > ${S}/build/linux/virtwl.h
curl "https://chromium.googlesource.com/chromiumos/containers/sommelier/+/refs/heads/master/sommelierrc?format=TEXT" | base64 --decode > ${S}/sommelierrc
cat << 'EOF' >> ${S}/sommelier_sh
#!/bin/sh
if base=$(readlink "$0" 2>/dev/null); then
case $base in
/*) base=$(readlink -f "$0" 2>/dev/null);; # if $0 is abspath symlink, make symlink fully resolved.
*) base=$(dirname "$0")/"${base}";;
esac
else
case $0 in
/*) base=$0;;
*) base=${PWD:-`pwd`}/$0;;
esac
fi
basedir=${base%/*}
# TODO(crbug/1003841): Remove LD_ARGV0 once
# ld.so supports forwarding the binary name.
LD_ARGV0="$0" LD_ARGV0_REL="../bin/sommelier" exec "${basedir}/../lib64/ld-linux-x86-64.so.2" --library-path "${basedir}/../usr/lib64" --inhibit-rpath '' "${base}.elf" "$@"
EOF
chmod +x ${S}/sommelier_sh
cat << 'EOF' >> ${S}/sommelierd
#!/bin/bash
pkill -f sommelier.elf &>/dev/null
# As per https://www.reddit.com/r/chromeos/comments/8r5pvh/crouton_sommelier_openjdk_and_oracle_sql/e0pfknx/
# One needs a second sommelier instance for wayland clients since at some point wl-drm was not implemented
# in ChromeOS's wayland compositor.
sommelier --master --peer-cmd-prefix="/lib64/ld-linux-x86-64.so.2 --library-path /lib64:/usr/lib64" --drm-device=/dev/dri/renderD128 --shm-driver=noop --data-driver=noop --display=wayland-0 --socket=wayland-1 --virtwl-device=/dev/null > /tmp/sommelier.log 2>&1 &
sommelier -X --x-display=$DISPLAY --scale=$SCALE --glamor --drm-device=/dev/dri/renderD128 --virtwl-device=/dev/null --shm-driver=noop --data-driver=noop --display=wayland-0 --xwayland-path=/bin/Xwayland --peer-cmd-prefix="/lib64/ld-linux-x86-64.so.2" --no-exit-with-child /bin/sh -c "touch ~/.Xauthority; xauth -f ~/.Xauthority add $DISPLAY . $(xxd -l 16 -p /dev/urandom); /etc/sommelierrc" &>>/tmp/sommelier.log
EOF
chmod +x ${S}/sommelierd
cat << 'EOF' >> ${S}/startsommelier
#!/bin/bash
for i in $(ls ~/.sommelier)
do
export $i="$(cat ~/.sommelier/$i 2>/dev/null || :)"
done
SOMM=$(pgrep -fc sommelier.elf 2> /dev/null)
if [[ "$SOMM" == "0" ]]; then
[ -f /usr/local/bin/stopbroadway ] && stopbroadway
/usr/sbin/sommelierd > /dev/null 2>&1 &
fi
wait=3
until [[ "$(pgrep -fc sommelier.elf)" == "2" ]]
do
[[ "$wait" -le "0" ]] && break
(( wait = wait - 1 ))
sleep 1
done
SOMMPIDS=$(pgrep -f sommelier.elf 2> /dev/null)
if [[ "$(pgrep -fc sommelier.elf 2> /dev/null)" == "2" ]]; then
echo "sommelier processes running: $(echo $SOMMPIDS)"
else
echo "sommelier failed to start"
exit 1
fi
EOF
chmod +x ${S}/startsommelier
cat << 'EOF' >> ${S}/stopsommelier
#!/bin/bash
SOMM=$(pgrep -fc sommelier.elf 2> /dev/null)
if [[ "$SOMM" -gt "0" ]]; then
pkill -f sommelier.elf &>/dev/null
else
exit 0
fi
if [[ "$(pgrep -fc sommelier.elf 2> /dev/null)" -gt "0" ]]; then
echo "sommelier failed to stop"
exit 1
else
echo "sommelier stopped"
fi
EOF
chmod +x ${S}/stopsommelier
cat << 'EOF' >> ${S}/restartsommelier
#!/bin/bash
stopsommelier && startsommelier
EOF
chmod +x ${S}/restartsommelier
}
src_configure() {
append-cflags -fuse-ld=lld
append-cxxflags -fuse-ld=lld
cd ${S}
meson -Dxwayland_path=/usr/bin/Xwayland -Dxwayland_gl_driver_path=/usr/lib64/dri -Ddefault_library=both -Dxwayland_shm_driver=noop -Dshm_driver=noop -Dvirtwl_device=/dev/null -Dpeer_cmd_prefix=/lib64/ld-linux-x86-64.so.2 -Dbuildtype=release -Dprefix=/usr build
meson configure build
}
src_compile() {
ninja -C build
}
src_install() {
DESTDIR="${D}" ninja -C build install
mkdir "${D}"etc
mkdir -p "${D}"usr/sbin
mkdir -p "${D}"bin
cp ${S}/sommelierrc ${D}etc/sommelierrc
mv ${D}/usr/bin/sommelier ${D}bin/sommelier.elf
cp ${S}/sommelier_sh ${D}bin/sommelier
cp ${S}/sommelierd ${D}usr/sbin/sommelierd
cp ${S}/startsommelier ${D}usr/bin/startsommelier
cp ${S}/stopsommelier ${D}usr/bin/stopsommelier
cp ${S}/restartsommelier ${D}usr/bin/restartsommelier
}
Edited by satmandu