This was not a problem in 4.12 packaged versions, but has been visible since 4.14 was introduced to Artix. xfwm4 --replace 2>&1 & sees the effect disappear until the next reboot, also changing the theme in the settings menu does this. All 4 default themes show the effect. Chromium is not affected. Hovering on the buttons with wrong icons reveals correct icons below. I think probably a graphics call is made too early in the boot process that fails, and the result is stored and not checked later when it is used. It must work properly later when the graphics stack is fully available. Also it might be a race condition so not everyone gets this. I rebuilt xfce4 packages to try and find the point the problem appeared. Downgrading packages broke things at various points. Installed extra terminal apps, xfce4 terminal works with below versions though. I took most stuff to 4.14pre1 that was well defined, then took xfwm4 and it's deps a bit further, it's other deps hadn't changed much. Resulting versions in use that functioned with both xfwm4 4.13 and 4.13.1 : Using Artix Linux Open RC, up to date except: libxfce4ui tag=libxfce4ui-4.13.1 libxfce4util tag=xfce-4.14pre1 xfce4-dev-tools tag=xfce4-dev-tools-4.13.0 xfce4-panel tag=xfce-4.14pre1 xfce4-session tag=xfce-4.14pre1 xfce4-settings tag=xfce-4.14pre1 xfconf tag=xfconf-4.13.1 xfdesktop tag=xfce-4.14pre1 xfwm4 tag=xfwm4-4.13.0 (Working version, normal border & buttons) tag=xfwm4-4.13.1 (Odd looking border & buttons, from here up to xfwm4-git-4.14.0+18+g5ea89cb90-1 git head ~2019-10-08) Then I tried narrowing it down more to a commit level looking at the 4.14 history: https://git.xfce.org/xfce/xfwm4/log/?h=xfce-4.14&ofs=450 It was introduced between these two commits: https://git.xfce.org/xfce/xfwm4/commit/?h=xfce-4.14&id=89c29f54d2967a1a174db30de877faa1e02b62d5 https://git.xfce.org/xfce/xfwm4/commit/?h=xfce-4.14&id=574ea24bceddde438c1d30aae5abe0b1e314e82a The intermediate commits won't build so that is as close as I can get. $ inxi -b System: Host: ax Kernel: 5.3.5-artix1-1-ARTIX x86_64 bits: 64 Desktop: Xfce 4.13.4 Distro: Artix Linux Machine: Type: Portable System: Dell product: Precision M4400 v: N/A serial: <root required> Mobo: Dell model: 0NY980 serial: <root required> BIOS: Dell v: A29 date: 06/04/2013 Battery: ID-1: BAT0 charge: 69.7 Wh condition: 69.7/73.3 Wh (95%) CPU: Dual Core: Intel Core2 Duo T9900 type: MCP speed: 798 MHz min/max: 800/3068 MHz Graphics: Device-1: NVIDIA G96GLM [Quadro FX 770M] driver: nouveau v: kernel Display: tty server: X.Org 1.20.5 driver: nouveau resolution: 1440x900~60Hz Message: Unable to show advanced data. Required tool glxinfo missing. Network: Device-1: Intel 82567LM Gigabit Network driver: e1000e Device-2: Intel Ultimate N WiFi Link 5300 driver: iwlwifi Drives: Local Storage: total: 111.79 GiB used: 27.31 GiB (24.4%) < that's an SSD Info: Processes: 189 Uptime: 2h 26m Memory: 7.77 GiB used: 368.2 MiB (4.6%) Shell: bash inxi: 3.0.26 With the earlier 4.13 versions of xfwm4 there was short bit of random color across the whole screen before the desktop started. That splash flash is fixed later but may be from a similar cause? The 'wrong' window buttons look a bit different in early 4.13 too. Pictures of the various effects linked below, mousepad on the white background is 4.13 as is the random color effect. The rest are 4.14. Very occasionally it will look different for a boot, with a finer patterned border or a black close button. https://yadi.sk/i/HHNRVOdJm1p4dg https://yadi.sk/i/y4A75YOLp00mjA https://yadi.sk/i/RmoYoraO-NLPjQ https://yadi.sk/i/p23PcQUh5HYieQ https://yadi.sk/i/Hd2IR-8F5jHj3g
Hi, I'm writing here because this bug has been referenced in bug #15990, which is about window decoration problem on FreeBSD. I'm not an expert C programmer, and I don't have real knowledge about the xfwm sources, but having a look at the commit range you suggest it looks like the one which could most influence your problem is this: https://git.xfce.org/xfce/xfwm4/commit/?h=xfce-4.14&id=c1b720f018f8942a361cf9ad68bf308161effa8d Which moved to cairo to draw window borders. I could be wrong, I'm simply trying to bring something to the conversation which may move things nearer to a solution. What version of cairo have you installed? On FreeBSD ports we are using cairo 1.16.0, by default with OpenGL compiled in (not sure how this factors in). NOTE: I'm not experiencing the issue, but since at present I'm maintaining the XFCE FreeBSD port I'm trying to have things move forward.
Yes, I saw your bug, in fact that's where I spotted that it does not affect Chromium and found the same for me. Also these may be related, as they have been 'solved' by restarting the desktop somehow: https://bbs.archlinux.org/viewtopic.php?id=248861 https://bbs.archlinux.org/viewtopic.php?id=248388 Although the effects described are very different to mine, so it's difficult to say for sure. But I had not read of any resolution or seen much sign of progress recently on there. It could be xfwm4 is correct in it's code usage and the issue could be in cairo, mesa, xorg drivers, the kernel (perhaps not as it appears in BSD), or elsewhere that I have not thought of. Regarding those compilation issues I had similar problems sometimes, xfwm4 can't be built or run without version compatible deps, see above, also this page shows where I downgraded to first: https://wiki.xfce.org/releng/4.14/xfce_4.14pre1 Currently installed packages: cairo Version : 1.17.2+17+g52a7c79fd-2 mesa Version : 19.2.0-2 xf86-video-nouveau Version : 1.0.16-1 Build details (--disable-gl is in Cairo in Artix) : https://gitea.artixlinux.org/packagesC/cairo/src/branch/master/repos/extra-x86_64/PKGBUILD https://gitea.artixlinux.org/packagesM/mesa/src/branch/master/repos/extra-x86_64/PKGBUILD https://gitea.artixlinux.org/packagesX/xf86-video-nouveau/src/branch/master/repos/extra-x86_64/PKGBUILD With nouveau and xorg simple drivers are loaded then replaced as the boot progresses. Does your problem go away for the rest of that boot after xfwm4 --replace (no other options needed) or changing the theme like mine does? Apparently Ubuntu introduced 4.13 some time ago, and it has recently got to Mint.
(In reply to stratus from comment #2) > > Currently installed packages: > cairo Version : 1.17.2+17+g52a7c79fd-2 This reduces my hopes for magically fixing this with a cairo update. You never know. > Does your problem go away for the rest of that boot after xfwm4 --replace > (no other options needed) or changing the theme like mine does? > Apparently Ubuntu introduced 4.13 some time ago, and it has recently got to > Mint. As I said I'm not experiencing this issue on my machines, but based on the reports I got, no, the problem does not go away by restarting xfwm.
On my OS the cairo build fails with --enable-gl=yes because configure detects it is not required and disables it. checking whether cairo's EGL functions feature could be enabled... no (not required by any backend) checking whether cairo's GLX functions feature could be enabled... no (not required by any backend) checking whether cairo's WGL functions feature could be enabled... no (not required by any backend) HW graphics code is done with feature detection and fall back options when things are not supported. In my case things work normally, just not at boot it seems, but if the BSD issue is there throughout, it might be the --enable-gl in cairo not working on some hardware I guess. There is a debug option in xwfm4 that writes to a log file, I tried it on one build but didn't find a log, I'll probably investigate that more.
(In reply to stratus from comment #4) > HW graphics code is done with feature detection and fall back options when > things are not supported. In my case things work normally, just not at boot > it seems, but if the BSD issue is there throughout, it might be the > --enable-gl in cairo not working on some hardware I guess. This is interesting, but unluckily, not experiencing the issue, I can't test this myself, I'll try to find some fellow FreeBSD user who can test this and report back.
I enabled debug logging in xfwm4: /etc/makepkg.conf, added -DDEBUG=1 to the compiler flags (you could modify src/main.c instead, add #define DEBUG=1) #DEBUG_CFLAGS="-g -fvar-tracking-assignments" DEBUG_CFLAGS="-g -fvar-tracking-assignments -DDEBUG=1" Changed PKGBUILD for xfwm4 to add DEBUG_CFLAGS: options=(debug) also changed --disble-debug to --enable-debug=yes in configure options of PKGBUILD I put a convenient logfile location in .bashrc, I start with startx so this is defined before: export XFWM4_LOG_FILE="/home/myname/xfwm4-debug-$(date --iso-8601=seconds).txt" (~/ for homedir didn't work) NV96 = Quadro FX 770M so it detects my graphics card correctly from the start. I don't see any obvious errors although I'm not sure what I should be looking for. logs here : https://yadi.sk/d/RKkxpQOWCJMmgw xfwm4-debug-2019-10-14T03:12:49+01:00.txt xfwm4-debug-2019-10-14T03:13:00+01:00.txt xfwm4-debug-2019-10-14T03:15:06+01:00.txt Opened a terminal, did xfwm4 --replace & and shut down in first 3 I think. xfwm4-debug-2019-10-14T03:15:20+01:00.txt Swapped between windows, mousepad & terminal, then did xfwm4 replace and shut down
The debug file doesn't record the startup of the replacement xfwm4 when a user defined location is used, as it can't write while the original xfwm4 holds the fd. I fixed that and added some debug output to one area of cairo, which worked, from almost the start of xfwm4. There are more cairo surfaces I can hopefully log in future like this. No errors were logged from that section although the decoration bug was present. BTW, to build to commits I was simply using a PKGBUILD modified from xfwm4-git in the AUR e.g. source=("git://git.xfce.org/xfce/xfwm4#commit=574ea24bceddde438c1d30aae5abe0b1e314e82a") and a few other small mods where required. BSD ports seem to allow git clone builds as well, although there are numerous ways to build things of course: https://forums.freebsd.org/threads/building-my-own-port-package-distributing-over-self-hosted-repo.62562/ DBG[main.c:715] main(): xfwm4 starting DBG[main.c:520] initialize(): xfwm4 starting, using GTK+-3.24.12 DBG[compositor.c:4273] compositorInitDisplay(): composite event base: 0 DBG[compositor.c:4274] compositorInitDisplay(): composite error base: 0 DBG[compositor.c:4275] compositorInitDisplay(): composite version: 0.4 DBG[compositor.c:4291] compositorInitDisplay(): damage event base: 91 DBG[compositor.c:4292] compositorInitDisplay(): damage error base: 152 DBG[compositor.c:4308] compositorInitDisplay(): fixes event base: 87 DBG[compositor.c:4309] compositorInitDisplay(): fixes error base: 140 DBG[compositor.c:4327] compositorInitDisplay(): present opcode: 148 DBG[compositor.c:4328] compositorInitDisplay(): present event base: 0 DBG[compositor.c:4329] compositorInitDisplay(): present error base: 0 DBG[mypixmap.c:1186] xfwmPixmapCreateSurface(): cairo surface status : no error has occurred DBG[mypixmap.c:1186] xfwmPixmapCreateSurface(): cairo surface status : no error has occurred DBG[mypixmap.c:1186] xfwmPixmapCreateSurface(): cairo surface status : no error has occurred etc. for the next 120 lines or so, and appearing at other points later too diff --git a/src/main.c b/src/main.c index 055c015..c0d40de 100644 --- a/src/main.c +++ b/src/main.c @@ -114,7 +114,7 @@ setupLog (void) str = g_getenv ("XFWM4_LOG_FILE"); if (str) { - logfile = g_strdup (str); + logfile = g_strdup_printf ("%s-%d.log", str, (int) getpid ()); } else { diff --git a/src/mypixmap.c b/src/mypixmap.c index 354d708..6bce170 100644 --- a/src/mypixmap.c +++ b/src/mypixmap.c @@ -1145,6 +1145,7 @@ xfwmPixmapDuplicate (xfwmPixmap * src, xfwmPixmap * dst) cairo_surface_t * xfwmPixmapCreateSurface (xfwmPixmap *pm, gboolean bitmap) { +#ifndef DEBUG g_return_val_if_fail (pm != NULL, NULL); if (bitmap) @@ -1161,4 +1162,28 @@ xfwmPixmapCreateSurface (xfwmPixmap *pm, gboolean bitmap) pm->screen_info->visual, pm->width, pm->height); } +#else + cairo_surface_t *rval; + cairo_status_t surface_status; + + g_return_val_if_fail (pm != NULL, NULL); + + if (bitmap) + { + rval = cairo_xlib_surface_create_for_bitmap (pm->screen_info->display_info->dpy, + pm->mask, + pm->screen_info->xscreen, + pm->width, pm->height); + } + else + { + rval = cairo_xlib_surface_create (pm->screen_info->display_info->dpy, + pm->pixmap, + pm->screen_info->visual, + pm->width, pm->height); + } + surface_status = cairo_surface_status (rval); + DBG ("cairo surface status : %s", cairo_status_to_string (surface_status)); + return (rval); +#endif }
The 'wrong' buttons are actual images in the source code, not misrendered: From left: /xfwm4/themes/default/stick-toggled-pressed.xpm /xfwm4/themes/default/shade-toggled-pressed.xpm /xfwm4/themes/default/maximize-pressed.xpm /xfwm4/themes/default/maximize-toggled-pressed.xpm They could be the prelight.xpm variants too. The window border seems to be made by little images from here put together, e.g. /xfwm4/themes/default/bottom-active.xpm /xfwm4/themes/default/bottom-inactive.xpm However the active window border is black and white in parts, while the buttons are normal but show the wrong images.
The png files under /usr/share/themes/Default/xfwm4/ look no good, they are just lines not images. (Viewed in Ristretto and Thunar.) The xpm files look OK. In NEWS it talks of using png for speed, so perhaps that is why they get used at boot? I had previously downloaded and unpacked the latest xfwm4 4.14 Ubuntu source package to look at, and the png files there are the same, it also has svg files looking like that too, they are in my git head build source but the PKGBUILD doesn't install them. Also I found some incidental issues while trying things. Building with various options disabled made no difference. ./autogen.sh \ --prefix=/usr \ --libexecdir=/usr/lib \ --sysconfdir=/etc \ --localstatedir=/var \ --disable-dependency-tracking \ --disable-static \ --disable-epoxy \ --enable-startup-notification \ --disable-xsync \ --enable-render \ --enable-randr \ --disable-xpresent \ --disable-compositor \ --disable-debug render, randr and startup-notification could not be disabled as that caused the build to fail with errors. Installing a 3rd party theme from the AUR required an extra package as a dep: [Repo: 1] gtk-engine-murrine-0.98.2-3 [Aur: 1] matcha-gtk-theme-2019_10_03-1 This did fix the wrong button on active window effect as the correct matcha theme buttons were shown, but the frame was still wrong. It only has png files in it's theme. Building with DEBUG_TRACE defined as well as DEBUG created a build error in misc.c so that was commented out, where it is currently only tells you the value of an uninitialized variable even if it was changed to w1 or w2: --- a/src/misc.c +++ b/src/misc.c @@ -51,7 +51,7 @@ getMouseXY (ScreenInfo *screen_info, gint *x2, gint *y2) guint mask; gint x1, y1; - TRACE ("window (0x%lx)", w); +// TRACE ("window (0x%lx)", w); myDisplayErrorTrapPush (screen_info->display_info); XQueryPointer (myScreenGetXDisplay (screen_info), screen_info->xroot, &w1, &w2, &x1, &y1, x2, y2, &mask);
Fixing the images helps as the active window now has color. But with svg files and png files the broken up and wrong buttons effect is still there. With only png files it is nearly OK, see photo: https://yadi.sk/i/BlsaLwUl-SY_lA But there is still a bit of a problem remaining. imagemagick will convert from xpm to png $ convert file.xpm file.png It claimed to need potrace to make svg files but was no good even with that installed and lost the backgrounds. png2svg from the AUR worked perfectly $ png2svg file.png >file.svg This BASH script converts all the xfwm4 installed theme image files from xpm to png then deletes the xpm ones (imagemagick must be installed and working) but if anyone tried it be sure you can reinstall xfwm4 to put it back to standard if it doesn't work as intended! Earlier I deleted the entire current theme dir and rebooted, things still sort of worked but there were no buttons or borders on the windows until I went to settings and selected another undeleted theme. #!/bin/bash for f in /usr/share/themes/{Daloa,Default,Default-hdpi,Default-xhdpi,Kokodi,Moheli}/xfwm4/*.png do if [[ -f $f ]] then rm ${f} fi done for f in /usr/share/themes/{Daloa,Default,Default-hdpi,Default-xhdpi,Kokodi,Moheli}/xfwm4/*.xpm do if [[ -f $f ]] then convert ${f} ${f%%.xpm}.png rm ${f} fi done The script revealed that some of the xpm files were faulty as well: $ sudo ./xpmpng.sh convert: not enough pixel data `/usr/share/themes/Default-xhdpi/xfwm4/menu-active.xpm' @ error/xpm.c/ReadXPMImage/501. convert: no images defined `/usr/share/themes/Default-xhdpi/xfwm4/menu-active.png' @ error/convert.c/ConvertImageCommand/3273. convert: not enough pixel data `/usr/share/themes/Default-xhdpi/xfwm4/menu-inactive.xpm' @ error/xpm.c/ReadXPMImage/501. convert: no images defined `/usr/share/themes/Default-xhdpi/xfwm4/menu-inactive.png' @ error/convert.c/ConvertImageCommand/3273. convert: not enough pixel data `/usr/share/themes/Default-xhdpi/xfwm4/menu-prelight.xpm' @ error/xpm.c/ReadXPMImage/501. convert: no images defined `/usr/share/themes/Default-xhdpi/xfwm4/menu-prelight.png' @ error/convert.c/ConvertImageCommand/3273. convert: not enough pixel data `/usr/share/themes/Default-xhdpi/xfwm4/menu-pressed.xpm' @ error/xpm.c/ReadXPMImage/501. convert: no images defined `/usr/share/themes/Default-xhdpi/xfwm4/menu-pressed.png' @ error/convert.c/ConvertImageCommand/3273. thunar does not display a thumbnail of those images, while gpicview shows an error message: dimensions do not match data.
Upgrading another PC, totally different hardware, desktop AMD twin core with spinning HDD, but also using Nouveau & Nvidia graphics on Artix, showed the same issues. The above script hack gave the same results to improve it. There could be some general problem with displaying xpm files, at least by whatever method XFCE uses, as Ristretto will not open the xpm theme components at all, but gpicview-gtk3 can display them.
Adding these rules to audit logging: -a always,exit -F arch=b64 -S all -F dir=/usr/share/themes/Default/xfwm4 -F perm=rwxa -F key=xfwm4 -a always,exit -F arch=b32 -S all -F dir=/usr/share/themes/Default/xfwm4 -F perm=rwxa -F key=xfwm4 revealed that all the files are opened twice at boot, consecutively, not clashing on times, but only once on xfwm4 --replace which may or may not be significant. On changing the theme it opens themerc twice but the other files only once. It doesn't seem to read them for normal desktop use. So perhaps the double read is indicating the problem, while the single read on replace loads a working set. The xpm issues are perhaps separate.
Going to xfce panel and entering the custom color dialogue, the color on the bar at the bottom is checkered and blocky. But that is just a GTK widget made by Glade? Perhaps it does something with the rendering that is different to other GTK3 apps, idk. Selecting this color results in a slightly transparent panel even though it isn't supposed to be. The color on the initial page is then shown as blocky too. This is not the case when using a standard color, everything is normal and the panel is not transparent. I ran valgrind --tool=memcheck xfwm4 --replace then switched to another terminal tab and ran xfwm4 --replace, this gave some possibly interesting results, I'll see if I can add to this somehow. $ valgrind --tool=memcheck xfwm4 --replace ==2958== Memcheck, a memory error detector ==2958== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==2958== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info ==2958== Command: xfwm4 --replace ==2958== Waiting for current window manager (Xfwm4) on screen :0.0 to exit: Done ==2958== Syscall param ioctl(generic) points to uninitialised byte(s) ==2958== at 0x5CF5E2B: ioctl (in /usr/lib/libc-2.30.so) ==2958== by 0xADD5C18: drmIoctl (in /usr/lib/libdrm.so.2.4.0) ==2958== by 0xADD6CFC: drmCommandWriteRead (in /usr/lib/libdrm.so.2.4.0) ==2958== by 0x116BEC03: ??? (in /usr/lib/libdrm_nouveau.so.2.0.0) ==2958== by 0x116C1A0A: nouveau_device_new (in /usr/lib/libdrm_nouveau.so.2.0.0) ==2958== by 0xB58B25C: nouveau_drm_screen_create (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB308737: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB3AC6C7: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB30CCDC: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB309FFE: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xAD64B70: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== by 0xAD55292: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== Address 0x11bc3a12 is 2 bytes inside a block of size 72 alloc'd ==2958== at 0x483877F: malloc (vg_replace_malloc.c:309) ==2958== by 0x116BEBA6: ??? (in /usr/lib/libdrm_nouveau.so.2.0.0) ==2958== by 0x116C1A0A: nouveau_device_new (in /usr/lib/libdrm_nouveau.so.2.0.0) ==2958== by 0xB58B25C: nouveau_drm_screen_create (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB308737: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB3AC6C7: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB30CCDC: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB309FFE: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xAD64B70: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== by 0xAD55292: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== by 0xAD50D34: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== by 0xAD511D1: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== ==2958== Syscall param ioctl(generic) points to uninitialised byte(s) ==2958== at 0x5CF5E2B: ioctl (in /usr/lib/libc-2.30.so) ==2958== by 0xADD5C18: drmIoctl (in /usr/lib/libdrm.so.2.4.0) ==2958== by 0xADD6CFC: drmCommandWriteRead (in /usr/lib/libdrm.so.2.4.0) ==2958== by 0x116C16CF: nouveau_object_mthd (in /usr/lib/libdrm_nouveau.so.2.0.0) ==2958== by 0x116C1A2A: nouveau_device_new (in /usr/lib/libdrm_nouveau.so.2.0.0) ==2958== by 0xB58B25C: nouveau_drm_screen_create (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB308737: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB3AC6C7: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB30CCDC: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB309FFE: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xAD64B70: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== by 0xAD55292: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== Address 0x11bc3aa2 is 2 bytes inside a block of size 136 alloc'd ==2958== at 0x483877F: malloc (vg_replace_malloc.c:309) ==2958== by 0x116C168F: nouveau_object_mthd (in /usr/lib/libdrm_nouveau.so.2.0.0) ==2958== by 0x116C1A2A: nouveau_device_new (in /usr/lib/libdrm_nouveau.so.2.0.0) ==2958== by 0xB58B25C: nouveau_drm_screen_create (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB308737: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB3AC6C7: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB30CCDC: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xB309FFE: ??? (in /usr/lib/dri/nouveau_dri.so) ==2958== by 0xAD64B70: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== by 0xAD55292: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== by 0xAD50D34: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== by 0xAD511D1: ??? (in /usr/lib/libGLX_mesa.so.0.0.0) ==2958== ==2958== ==2958== HEAP SUMMARY: ==2958== in use at exit: 3,895,735 bytes in 35,469 blocks ==2958== total heap usage: 307,697 allocs, 272,228 frees, 36,615,332 bytes allocated ==2958== ==2958== LEAK SUMMARY: ==2958== definitely lost: 14,200 bytes in 222 blocks ==2958== indirectly lost: 40,457 bytes in 1,570 blocks ==2958== possibly lost: 221,635 bytes in 1,527 blocks ==2958== still reachable: 3,523,819 bytes in 31,378 blocks ==2958== of which reachable via heuristic: ==2958== length64 : 4,936 bytes in 82 blocks ==2958== newarray : 2,096 bytes in 51 blocks ==2958== suppressed: 0 bytes in 0 blocks ==2958== Rerun with --leak-check=full to see details of leaked memory ==2958== ==2958== Use --track-origins=yes to see where uninitialised values come from ==2958== For lists of detected and suppressed errors, rerun with: -s ==2958== ERROR SUMMARY: 6 errors from 2 contexts (suppressed: 59 from 1)
I rebuilt the possibly relevant pkgs with new options in makepkg.conf plus no strip to get an accurate valgrind trace: #CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt" CFLAGS="-march=x86-64 -mtune=generic -pipe -fno-plt -Og -g -fvar-tracking-assignments" #CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt" CXXFLAGS="-march=x86-64 -mtune=generic -pipe -fno-plt -Og -g -fvar-tracking-assignments" xfwm4 libxfce4ui xfconf libwnck3 libepoxy libxpresent cairo mesa libdrm glu xf86-video-nouveau libxpm $ valgrind --tool=memcheck --fullpath-after=/home/name/debug-xwfm4 --num-callers=100 xfwm4 --replace ==3036== Memcheck, a memory error detector ==3036== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==3036== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info ==3036== Command: xfwm4 --replace ==3036== Waiting for current window manager (Xfwm4) on screen :0.0 to exit: Done ==3036== Syscall param ioctl(generic) points to uninitialised byte(s) ==3036== at 0x5D0D25B: ioctl (in /usr/lib/libc-2.30.so) ==3036== by 0xABF70DE: drmIoctl (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/xf86drm.c:180) ==3036== by 0xABF80F3: drmCommandWriteRead (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/xf86drm.c:2644) ==3036== by 0x116B39DA: nouveau_object_ioctl (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/nouveau/nouveau.c:88) ==3036== by 0x116B4286: nouveau_object_init (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/nouveau/nouveau.c:262) ==3036== by 0x116B655C: nouveau_device_new (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/nouveau/nouveau.c:389) ==3036== by 0xB3A90AD: nouveau_drm_screen_create (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c:101) ==3036== by 0xB11F19A: pipe_nouveau_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/target-helpers/drm_helper.h:76) ==3036== by 0xB1BD86C: pipe_loader_drm_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c:314) ==3036== by 0xB1BD34E: pipe_loader_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/pipe-loader/pipe_loader.c:128) ==3036== by 0xB122EA1: dri2_init_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/state_trackers/dri/dri2.c:2036) ==3036== by 0xB120725: driCreateNewScreen2 (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/mesa/drivers/dri/common/dri_util.c:154) ==3036== by 0xAB86570: dri2CreateScreen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/dri2_glx.c:1288) ==3036== by 0xAB770F0: AllocAndFetchScreenConfigs (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxext.c:817) ==3036== by 0xAB774C3: __glXInitialize (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxext.c:940) ==3036== by 0xAB73576: GetGLXPrivScreenConfig (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxcmds.c:174) ==3036== by 0xAB73E02: glXQueryServerString (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxcmds.c:1355) ==3036== by 0x4AD7E03: epoxy_glXQueryServerString_global_rewrite_ptr (/symbolpkgs/libepoxy/src/build/src/glx_generated_dispatch.c:4324) ==3036== by 0x4AD66AA: epoxy_glx_version (/symbolpkgs/libepoxy/src/build/../libepoxy/src/dispatch_glx.c:80) ==3036== by 0x124438: init_glx (/46build-std-withdbgsymbols/src/xfwm4/src/compositor.c:1309) ==3036== by 0x124438: compositorManageScreen (/46build-std-withdbgsymbols/src/xfwm4/src/compositor.c:4518) ==3036== by 0x124438: compositorManageScreen (/46build-std-withdbgsymbols/src/xfwm4/src/compositor.c:4377) ==3036== by 0x116721: initialize (/46build-std-withdbgsymbols/src/xfwm4/src/main.c:613) ==3036== by 0x116721: main (/46build-std-withdbgsymbols/src/xfwm4/src/main.c:776) ==3036== Address 0x11bb88b2 is 2 bytes inside a block of size 72 alloc'd ==3036== at 0x483877F: malloc (/build/valgrind/src/valgrind/coregrind/m_replacemalloc/vg_replace_malloc.c:309) ==3036== by 0x116B4237: nouveau_object_init (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/nouveau/nouveau.c:251) ==3036== by 0x116B655C: nouveau_device_new (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/nouveau/nouveau.c:389) ==3036== by 0xB3A90AD: nouveau_drm_screen_create (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c:101) ==3036== by 0xB11F19A: pipe_nouveau_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/target-helpers/drm_helper.h:76) ==3036== by 0xB1BD86C: pipe_loader_drm_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c:314) ==3036== by 0xB1BD34E: pipe_loader_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/pipe-loader/pipe_loader.c:128) ==3036== by 0xB122EA1: dri2_init_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/state_trackers/dri/dri2.c:2036) ==3036== by 0xB120725: driCreateNewScreen2 (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/mesa/drivers/dri/common/dri_util.c:154) ==3036== by 0xAB86570: dri2CreateScreen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/dri2_glx.c:1288) ==3036== by 0xAB770F0: AllocAndFetchScreenConfigs (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxext.c:817) ==3036== by 0xAB774C3: __glXInitialize (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxext.c:940) ==3036== by 0xAB73576: GetGLXPrivScreenConfig (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxcmds.c:174) ==3036== by 0xAB73E02: glXQueryServerString (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxcmds.c:1355) ==3036== by 0x4AD7E03: epoxy_glXQueryServerString_global_rewrite_ptr (/symbolpkgs/libepoxy/src/build/src/glx_generated_dispatch.c:4324) ==3036== by 0x4AD66AA: epoxy_glx_version (/symbolpkgs/libepoxy/src/build/../libepoxy/src/dispatch_glx.c:80) ==3036== by 0x124438: init_glx (/46build-std-withdbgsymbols/src/xfwm4/src/compositor.c:1309) ==3036== by 0x124438: compositorManageScreen (/46build-std-withdbgsymbols/src/xfwm4/src/compositor.c:4518) ==3036== by 0x124438: compositorManageScreen (/46build-std-withdbgsymbols/src/xfwm4/src/compositor.c:4377) ==3036== by 0x116721: initialize (/46build-std-withdbgsymbols/src/xfwm4/src/main.c:613) ==3036== by 0x116721: main (/46build-std-withdbgsymbols/src/xfwm4/src/main.c:776) ==3036== ==3036== ==3036== HEAP SUMMARY: ==3036== in use at exit: 3,844,197 bytes in 34,381 blocks ==3036== total heap usage: 305,450 allocs, 271,069 frees, 36,546,658 bytes allocated ==3036== ==3036== LEAK SUMMARY: ==3036== definitely lost: 14,200 bytes in 222 blocks ==3036== indirectly lost: 40,457 bytes in 1,570 blocks ==3036== possibly lost: 221,635 bytes in 1,527 blocks ==3036== still reachable: 3,472,369 bytes in 30,291 blocks ==3036== of which reachable via heuristic: ==3036== length64 : 4,936 bytes in 82 blocks ==3036== newarray : 51,248 bytes in 52 blocks ==3036== suppressed: 0 bytes in 0 blocks ==3036== Rerun with --leak-check=full to see details of leaked memory ==3036== ==3036== Use --track-origins=yes to see where uninitialised values come from ==3036== For lists of detected and suppressed errors, rerun with: -s ==3036== ERROR SUMMARY: 6 errors from 1 contexts (suppressed: 53 from 1) But that section is not used when compositing is disabled, which did not affect the bug. gboolean compositorManageScreen (ScreenInfo *screen_info) { #ifdef HAVE_COMPOSITOR ... screen_info->use_glx = init_glx (screen_info); ... #endif /* HAVE_COMPOSITOR */ } static gboolean init_glx (ScreenInfo *screen_info) { ... version = epoxy_glx_version (myScreenGetXDisplay (screen_info), screen_info->screen); I think the buffer overflow could be caused by faulty values in screen_info which also contains the theme elements. It seems to be only trying to get a version value at that point anyway? Earlier I had enabled more verbose debugging with DEBUG_TRACE in xwfm4: DEBUG_CFLAGS="-g -fvar-tracking-assignments -DDEBUG=1 -DDEBUG_TRACE=1" I was trying to find where the xpm's / png's etc were accessed (which is difficult as there don't seem to be any notes in the code explaining that particular process and there's a lot of tricky stuff used), extract here from one log: TRACE[mypixmap.c:688] xpm_image_load(): file /usr/share/themes/Matcha-dark-azul/xfwm4/top-3-inactive.xpm TRACE[mypixmap.c:961] xfwmPixmapLoad(): pixmap 0x558c5d3b5e50, dir /usr/share/themes/Matcha-dark-azul/xfwm4, file title-4-active TRACE[mypixmap.c:1031] xfwmPixmapInit(): pixmap 0x558c5d3b5e50 TRACE[mypixmap.c:688] xpm_image_load(): file /usr/share/themes/Matcha-dark-azul/xfwm4/title-4-active.xpm TRACE[mypixmap.c:1004] xfwmPixmapCreate(): pixmap 0x558c5d3b5e50 [5×28] TRACE[mypixmap.c:817] xfwmPixmapDrawFromGdkPixbuf(): pixmap 0x558c5d3b5e50 TRACE[mypixmap.c:719] xfwmPixmapRefreshPict(): pixmap 0x558c5d3b5e50 TRACE[mypixmap.c:961] xfwmPixmapLoad(): pixmap 0x558c5d3b5e80, dir /usr/share/themes/Matcha-dark-azul/xfwm4, file title-4-inactive TRACE[mypixmap.c:1031] xfwmPixmapInit(): pixmap 0x558c5d3b5e80 TRACE[mypixmap.c:688] xpm_image_load(): file /usr/share/themes/Matcha-dark-azul/xfwm4/title-4-inactive.xpm TRACE[mypixmap.c:1004] xfwmPixmapCreate(): pixmap 0x558c5d3b5e80 [5×28] TRACE[mypixmap.c:817] xfwmPixmapDrawFromGdkPixbuf(): pixmap 0x558c5d3b5e80 TRACE[mypixmap.c:719] xfwmPixmapRefreshPict(): pixmap 0x558c5d3b5e80 TRACE[mypixmap.c:961] xfwmPixmapLoad(): pixmap 0x558c5d3b6030, dir /usr/share/themes/Matcha-dark-azul/xfwm4, file top-4-active TRACE[mypixmap.c:1031] xfwmPixmapInit(): pixmap 0x558c5d3b6030 TRACE[mypixmap.c:688] xpm_image_load(): file /usr/share/themes/Matcha-dark-azul/xfwm4/top-4-active.xpm TRACE[mypixmap.c:961] xfwmPixmapLoad(): pixmap 0x558c5d3b6060, dir /usr/share/themes/Matcha-dark-azul/xfwm4, file top-4-inactive TRACE[mypixmap.c:1031] xfwmPixmapInit(): pixmap 0x558c5d3b6060 TRACE[mypixmap.c:688] xpm_image_load(): file /usr/share/themes/Matcha-dark-azul/xfwm4/top-4-inactive.xpm TRACE[mypixmap.c:961] xfwmPixmapLoad(): pixmap 0x558c5d3b5eb0, dir /usr/share/themes/Matcha-dark-azul/xfwm4, file title-5-active TRACE[mypixmap.c:1031] xfwmPixmapInit(): pixmap 0x558c5d3b5eb0 TRACE[mypixmap.c:688] xpm_image_load(): file /usr/share/themes/Matcha-dark-azul/xfwm4/title-5-active.xpm TRACE[mypixmap.c:1004] xfwmPixmapCreate(): pixmap 0x558c5d3b5eb0 [5×28] TRACE[mypixmap.c:817] xfwmPixmapDrawFromGdkPixbuf(): pixmap 0x558c5d3b5eb0 TRACE[mypixmap.c:719] xfwmPixmapRefreshPict(): pixmap 0x558c5d3b5eb0 TRACE[mypixmap.c:961] xfwmPixmapLoad(): pixmap 0x558c5d3b5ee0, dir /usr/share/themes/Matcha-dark-azul/xfwm4, file title-5-inactive TRACE[mypixmap.c:1031] xfwmPixmapInit(): pixmap 0x558c5d3b5ee0 TRACE[mypixmap.c:688] xpm_image_load(): file /usr/share/themes/Matcha-dark-azul/xfwm4/title-5-inactive.xpm TRACE[mypixmap.c:1004] xfwmPixmapCreate(): pixmap 0x558c5d3b5ee0 [5×28] TRACE[mypixmap.c:817] xfwmPixmapDrawFromGdkPixbuf(): pixmap 0x558c5d3b5ee0 TRACE[mypixmap.c:719] xfwmPixmapRefreshPict(): pixmap 0x558c5d3b5ee0 TRACE[mypixmap.c:961] xfwmPixmapLoad(): pixmap 0x558c5d3b6090, dir /usr/share/themes/Matcha-dark-azul/xfwm4, file top-5-active TRACE[mypixmap.c:1031] xfwmPixmapInit(): pixmap 0x558c5d3b6090 TRACE[mypixmap.c:688] xpm_image_load(): file /usr/share/themes/Matcha-dark-azul/xfwm4/top-5-active.xpm TRACE[mypixmap.c:961] xfwmPixmapLoad(): pixmap 0x558c5d3b60c0, dir /usr/share/themes/Matcha-dark-azul/xfwm4, file top-5-inactive TRACE[mypixmap.c:1031] xfwmPixmapInit(): pixmap 0x558c5d3b60c0 TRACE[mypixmap.c:688] xpm_image_load(): file /usr/share/themes/Matcha-dark-azul/xfwm4/top-5-inactive.xpm which led me to look at: static void loadTheme (ScreenInfo *screen_info, Settings *rc) { A ScreenInfo struct has a lot of values in it, many of them GTK objects etc, although half of them are not used when compositing is disabled so presumably whatever is going wrong is in the first half.
/usr/bin/xfwm4 was moved to xfwm4-real, /usr/bin/xfwm4 was replaced with a script. $ cat /usr/bin/xfwm4 #!/usr/bin/bash valgrind --tool=memcheck --fullpath-after=/home/name/debug-xwfm4/ --log-file=/home/name/valgrind.log --num-callers=20 xfwm4-real "$@" This allowed xfwm4 to be run at boot under valgrind, using xpm files. It does not cause the broken up window frame and wrong buttons like this though. The desktop starts much slower which probably affects things. I cut num-callers a bit but no change. The log results were the same as with xfwm4 --replace, and the window frame and buttons on the active window looked normal (although colorless on all active and inactive windows, grey black and white only, unlike with png's.) audit logging showed it still opened all the theme file images twice at boot and once on --replace.
The problem with this is that when I tested the libepoxy tests that use this function (I added the version printout to stdout), valgrind found the same error, so xfwm4 is probably not doing anything wrong, if it did point to a genuine issue it might be in libdrm, mesa or libepoxy : $ valgrind --tool=memcheck --fullpath-after=/home/name/debug-xwfm4 --num-callers=100 ./glx_public_api_core ==4257== Memcheck, a memory error detector ==4257== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==4257== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info ==4257== Command: ./glx_public_api_core ==4257== ==4257== Syscall param ioctl(generic) points to uninitialised byte(s) ==4257== at 0x4BD125B: ioctl (in /usr/lib/libc-2.30.so) ==4257== by 0x53580DE: drmIoctl (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/xf86drm.c:180) ==4257== by 0x53590F3: drmCommandWriteRead (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/xf86drm.c:2644) ==4257== by 0xC1979DA: nouveau_object_ioctl (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/nouveau/nouveau.c:88) ==4257== by 0xC198286: nouveau_object_init (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/nouveau/nouveau.c:262) ==4257== by 0xC19A55C: nouveau_device_new (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/nouveau/nouveau.c:389) ==4257== by 0x5E8D0AD: nouveau_drm_screen_create (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c:101) ==4257== by 0x5C0319A: pipe_nouveau_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/target-helpers/drm_helper.h:76) ==4257== by 0x5CA186C: pipe_loader_drm_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c:314) ==4257== by 0x5CA134E: pipe_loader_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/pipe-loader/pipe_loader.c:128) ==4257== by 0x5C06EA1: dri2_init_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/state_trackers/dri/dri2.c:2036) ==4257== by 0x5C04725: driCreateNewScreen2 (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/mesa/drivers/dri/common/dri_util.c:154) ==4257== by 0x52E7570: dri2CreateScreen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/dri2_glx.c:1288) ==4257== by 0x52D80F0: AllocAndFetchScreenConfigs (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxext.c:817) ==4257== by 0x52D84C3: __glXInitialize (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxext.c:940) ==4257== by 0x52D4576: GetGLXPrivScreenConfig (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxcmds.c:174) ==4257== by 0x52D4EB6: glXQueryExtensionsString (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxcmds.c:1307) ==4257== by 0x490890C: epoxy_has_glx_extension (/symbolpkgs/10copytestlibepoxy/libepoxy/y4build/../src/dispatch_glx.c:143) ==4257== by 0x10917A: main (/symbolpkgs/10copytestlibepoxy/libepoxy/y4build/../test/glx_public_api_core.c:165) ==4257== Address 0x4e8fb02 is 2 bytes inside a block of size 72 alloc'd ==4257== at 0x483877F: malloc (/build/valgrind/src/valgrind/coregrind/m_replacemalloc/vg_replace_malloc.c:309) ==4257== by 0xC198237: nouveau_object_init (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/nouveau/nouveau.c:251) ==4257== by 0xC19A55C: nouveau_device_new (/symbolpkgs/libdrm/src/build/../libdrm-2.4.100/nouveau/nouveau.c:389) ==4257== by 0x5E8D0AD: nouveau_drm_screen_create (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c:101) ==4257== by 0x5C0319A: pipe_nouveau_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/target-helpers/drm_helper.h:76) ==4257== by 0x5CA186C: pipe_loader_drm_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c:314) ==4257== by 0x5CA134E: pipe_loader_create_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/auxiliary/pipe-loader/pipe_loader.c:128) ==4257== by 0x5C06EA1: dri2_init_screen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/gallium/state_trackers/dri/dri2.c:2036) ==4257== by 0x5C04725: driCreateNewScreen2 (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/mesa/drivers/dri/common/dri_util.c:154) ==4257== by 0x52E7570: dri2CreateScreen (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/dri2_glx.c:1288) ==4257== by 0x52D80F0: AllocAndFetchScreenConfigs (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxext.c:817) ==4257== by 0x52D84C3: __glXInitialize (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxext.c:940) ==4257== by 0x52D4576: GetGLXPrivScreenConfig (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxcmds.c:174) ==4257== by 0x52D4EB6: glXQueryExtensionsString (/symbolpkgs/mesa/src/build/../mesa-19.2.2/src/glx/glxcmds.c:1307) ==4257== by 0x490890C: epoxy_has_glx_extension (/symbolpkgs/10copytestlibepoxy/libepoxy/y4build/../src/dispatch_glx.c:143) ==4257== by 0x10917A: main (/symbolpkgs/10copytestlibepoxy/libepoxy/y4build/../test/glx_public_api_core.c:165) ==4257== epoxy_version = 33 gl_version = 33 epoxy_glx_version = 14 expected = 14 (1.4) ==4257== ==4257== HEAP SUMMARY: ==4257== in use at exit: 871,127 bytes in 3,466 blocks ==4257== total heap usage: 5,787 allocs, 2,321 frees, 2,300,347 bytes allocated ==4257== ==4257== LEAK SUMMARY: ==4257== definitely lost: 704 bytes in 3 blocks ==4257== indirectly lost: 0 bytes in 0 blocks ==4257== possibly lost: 12,005 bytes in 57 blocks ==4257== still reachable: 858,418 bytes in 3,406 blocks ==4257== suppressed: 0 bytes in 0 blocks ==4257== Rerun with --leak-check=full to see details of leaked memory ==4257== ==4257== Use --track-origins=yes to see where uninitialised values come from ==4257== For lists of detected and suppressed errors, rerun with: -s ==4257== ERROR SUMMARY: 6 errors from 1 contexts (suppressed: 0 from 0)
Valgrind was finding a false positive so there was no memory problem. Running xfwm4 at boot in one cpu core still shows the frame bug, so there's no internal race condition. $ cat /usr/bin/xfwm4 #!/usr/bin/bash taskset --cpu-list 0 xfwm4-real "$@"
I have now rebuilt these with debug symbols to current versions, except xfwm4 at (build time) git head cairo glu gtk3 libdrm libepoxy libwnck3 libxfce4ui libxpresent mesa xf86-video-nouveau xfconf xfwm4 and added a patch to create a core dump, as examining xfwm4 directly with gdb was difficult: --- a/src/frame.c +++ b/src/frame.c @@ -139,6 +139,7 @@ frameFillTitlePixmap (Client * c, int state, int part, int x, int w, int h, xfwm static void frameCreateTitlePixmap (Client * c, int state, int left, int right, xfwmPixmap * title_pm, xfwmPixmap * top_pm) { + static int coredump_once = 1; ScreenInfo *screen_info; cairo_surface_t *surface; cairo_t *cr; @@ -155,6 +156,14 @@ frameCreateTitlePixmap (Client * c, int state, int left, int right, xfwmPixmap * screen_info = c->screen_info; + if (coredump_once) + { + if (!fork()) + { + kill(getpid(), SIGSEGV); + } + coredump_once = 0; + } if (left > right) { temp = left; I booted with the modded xfwm4, opened a terminal, then ran replace without resizing it. Here are some preliminary results which show some info and the different backtraces from starting normally vs by --replace "Good" frame Core was generated by `xfwm4 --replace'. Program terminated with signal SIGSEGV, Segmentation fault. #0 0x00007f694a57622b in kill () from /usr/lib/libc.so.6 (gdb) bt #0 0x00007f694a57622b in kill () at /usr/lib/libc.so.6 #1 0x00005564075bbd59 in frameCreateTitlePixmap (c=c@entry=0x556407b0d1e0, state=state@entry=1, left=27, right=right@entry=569, title_pm=title_pm@entry=0x7fffcd1f3940, top_pm=top_pm@entry=0x7fffcd1f39d0) at frame.c:163 #2 0x00005564075bdbd9 in frameDrawWin (c=0x556407b0d1e0) at frame.c:908 #3 0x00005564075be361 in frameDraw (c=c@entry=0x556407b0d1e0, clear_all=<optimized out>) at frame.c:1368 #4 0x00005564075a3689 in clientConfigureWindows (c=c@entry=0x556407b0d1e0, wc=wc@entry=0x7fffcd1f3b40, mask=mask@entry=15, flags=flags@entry=20) at client.c:639 #5 0x00005564075a51d8 in clientConfigure (c=c@entry=0x556407b0d1e0, wc=wc@entry=0x7fffcd1f3b40, mask=mask@entry=15, flags=flags@entry=20) at client.c:830 #6 0x00005564075a53d5 in clientReconfigure (c=c@entry=0x556407b0d1e0, flags=flags@entry=20) at client.c:867 #7 0x00005564075a97f3 in clientFrame (display_info=display_info@entry=0x556407a51800, w=<optimized out>, recapture=recapture@entry=1) at client.c:1970 #8 0x00005564075a9abe in clientFrameAll (screen_info=0x5564078dd880) at client.c:2153 #9 0x00005564075c333a in initialize (compositor_mode=2, replace_wm=1) at main.c:643 #10 0x00005564075c3848 in main (argc=<optimized out>, argv=<optimized out>) at main.c:776 (gdb) up #1 0x00005564075bbd59 in frameCreateTitlePixmap (c=c@entry=0x556407b0d1e0, state=state@entry=1, left=27, right=right@entry=569, title_pm=title_pm@entry=0x7fffcd1f3940, top_pm=top_pm@entry=0x7fffcd1f39d0) at frame.c:163 163 kill(getpid(), SIGSEGV); (gdb) info locals coredump_once = 1 screen_info = 0x5564078dd880 surface = <optimized out> cr = <optimized out> layout = <optimized out> logical_rect = {x = 27, y = 0, width = 126736512, height = 21860} width = <optimized out> x = <optimized out> hoffset = <optimized out> w1 = <optimized out> w2 = <optimized out> w3 = <optimized out> w4 = <optimized out> w5 = <optimized out> temp = <optimized out> voffset = <optimized out> title_x = <optimized out> title_y = <optimized out> title_height = <optimized out> top_height = <optimized out> __func__ = "frameCreateTitlePixmap" (gdb) info args c = 0x556407b0d1e0 state = 1 left = 27 right = 569 title_pm = 0x7fffcd1f3940 top_pm = 0x7fffcd1f39d0 "Bad" frame Core was generated by `xfwm4'. Program terminated with signal SIGSEGV, Segmentation fault. #0 0x00007f350267f22b in kill () from /usr/lib/libc.so.6 (gdb) bt #0 0x00007f350267f22b in kill () at /usr/lib/libc.so.6 #1 0x000055e6065aad59 in frameCreateTitlePixmap (c=c@entry=0x55e607fb2a00, state=state@entry=1, left=27, right=right@entry=569, title_pm=title_pm@entry=0x7ffd9e1986d0, top_pm=top_pm@entry=0x7ffd9e198760) at frame.c:163 #2 0x000055e6065acbd9 in frameDrawWin (c=0x55e607fb2a00) at frame.c:908 #3 0x000055e6065ad361 in frameDraw (c=c@entry=0x55e607fb2a00, clear_all=<optimized out>) at frame.c:1368 #4 0x000055e606592689 in clientConfigureWindows (c=c@entry=0x55e607fb2a00, wc=wc@entry=0x7ffd9e1988d0, mask=mask@entry=15, flags=flags@entry=20) at client.c:639 #5 0x000055e6065941d8 in clientConfigure (c=c@entry=0x55e607fb2a00, wc=wc@entry=0x7ffd9e1988d0, mask=mask@entry=15, flags=flags@entry=20) at client.c:830 #6 0x000055e6065943d5 in clientReconfigure (c=c@entry=0x55e607fb2a00, flags=flags@entry=20) at client.c:867 #7 0x000055e6065987f3 in clientFrame (display_info=display_info@entry=0x55e607dde210, w=<optimized out>, recapture=recapture@entry=0) at client.c:1970 #8 0x000055e6065a7377 in handleMapRequest (display_info=display_info@entry=0x55e607dde210, ev=0x7ffd9e198b70) at events.c:1207 #9 0x000055e6065a8444 in handleEvent (display_info=0x55e607dde210, event=0x55e607cd3d90) at events.c:2254 #10 0x000055e6065a8a31 in xfwm4_event_filter (event=<optimized out>, data=<optimized out>) at events.c:2335 #11 0x000055e6065a4740 in eventXfwmFilter (gdk_xevent=<optimized out>, gevent=<optimized out>, data=<optimized out>) at event_filter.c:175 #12 0x00007f3503071cae in gdk_event_apply_filters (xevent=xevent@entry=0x7ffd9e198b70, event=event@entry=0x55e607ff2d10, window=window@entry=0x0) at ../gtk/gdk/x11/gdkeventsource.c:79 #13 0x00007f3503073aad in gdk_event_source_translate_event (event_source=event_source@entry=0x55e607bc84d0, xevent=xevent@entry=0x7ffd9e198b70) at ../gtk/gdk/x11/gdkeventsource.c:198 #14 0x00007f3503073c1b in _gdk_x11_display_queue_events (display=0x55e607b940e0) at ../gtk/gdk/x11/gdkeventsource.c:341 #15 0x00007f35030c6d51 in gdk_display_get_event (display=0x55e607b940e0) at ../gtk/gdk/gdkdisplay.c:441 #16 0x00007f35030737a0 in gdk_event_source_dispatch (source=<optimized out>, callback=<optimized out>, user_data=<optimized out>) at ../gtk/gdk/x11/gdkeventsource.c:363 #17 0x00007f3502d403ee in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0 #18 0x00007f3502d42201 in () at /usr/lib/libglib-2.0.so.0 #19 0x00007f3502d43113 in g_main_loop_run () at /usr/lib/libglib-2.0.so.0 #20 0x00007f35033b906a in gtk_main () at ../gtk/gtk/gtkmain.c:1325 #21 0x000055e6065b285f in main (argc=<optimized out>, argv=<optimized out>) at main.c:795 (gdb) info locals No symbol table info available. (gdb) up #1 0x000055e6065aad59 in frameCreateTitlePixmap (c=c@entry=0x55e607fb2a00, state=state@entry=1, left=27, right=right@entry=569, title_pm=title_pm@entry=0x7ffd9e1986d0, top_pm=top_pm@entry=0x7ffd9e198760) at frame.c:163 163 kill(getpid(), SIGSEGV); (gdb) info locals coredump_once = 1 screen_info = 0x55e607beb130 surface = <optimized out> cr = <optimized out> layout = <optimized out> logical_rect = {x = 27, y = 0, width = 129937712, height = 21990} width = <optimized out> x = <optimized out> hoffset = <optimized out> w1 = <optimized out> w2 = <optimized out> w3 = <optimized out> w4 = <optimized out> w5 = <optimized out> temp = <optimized out> voffset = <optimized out> title_x = <optimized out> title_y = <optimized out> title_height = <optimized out> top_height = <optimized out> __func__ = "frameCreateTitlePixmap" (gdb) info args c = 0x55e607fb2a00 state = 1 left = 27 right = 569 title_pm = 0x7ffd9e1986d0 top_pm = 0x7ffd9e198760 I then did set print pretty on, set logging on, print *c, print *screen_info. There were a lot of differences even at this top level of those structs. (Any sub values can be explored by request!) I intend to get more samples to hopefully filter the ordinary variants from the bug related ones. This is an initial diff -y --suppress-common-lines, this is actually edited to delete diff lines that were obviously hex memory addresses of pointers, there's quite a few, although a lot can probably be ignored: "bad" frame "good" frame after --replace frame = 12585528, | frame = 37749531, window = 12585536, | window = 37749539, window = 12585529, | window = 37749532, window = 12585530, | window = 37749533, window = 12585537, | window = 37749540, window = 12585531, | window = 37749534, window = 12585532, | window = 37749535, window = 12585533, | window = 37749536, window = 12585534, | window = 37749537, window = 12585535, | window = 37749538, window = 12585538, | window = 37749541, window = 12585539, | window = 37749542, window = 12585540, | window = 37749543, window = 12585541, | window = 37749544, window = 12585542, | window = 37749545, window = 12585543, | window = 37749546, pixmap = 12585544, | pixmap = 37749547, mask = 12585545, | mask = 37749548, pict = 12585548, | pict = 37749551, pixmap = 12585549, | pixmap = 37749552, mask = 12585550, | mask = 37749553, pict = 12585553, | pict = 37749556, pixmap = 12585554, | pixmap = 37749557, mask = 12585555, | mask = 37749558, pict = 12585558, | pict = 37749561, pixmap = 12585559, | pixmap = 37749562, mask = 12585560, | mask = 37749563, pict = 12585563, | pict = 37749566, serial = 3, | serial = 1, user_time = 26900, | user_time = 160617, flags = 12, | flags = 4, xfwm_flags = 41727, | xfwm_flags = 42751, last_raise = 0x55e607fc7c90, | last_raise = 0x0, client_count = 4, | client_count = 2, client_serial = 4, | client_serial = 2, pixmap = 12584332, | pixmap = 37749137, mask = 12584333, | mask = 37749138, pict = 12584338, | pict = 37749143, pixmap = 12584339, | pixmap = 37749144, mask = 12584340, | mask = 37749145, pict = 12584345, | pict = 37749150, pixmap = 12584346, | pixmap = 37749151, mask = 12584347, | mask = 37749152, pict = 12584352, | pict = 37749157, pixmap = 12584353, | pixmap = 37749158, mask = 12584354, | mask = 37749159, pict = 12584359, | pict = 37749164, pixmap = 12584360, | pixmap = 37749165, mask = 12584361, | mask = 37749166, pict = 12584366, | pict = 37749171, pixmap = 12584367, | pixmap = 37749172, mask = 12584368, | mask = 37749173, pict = 12584373, | pict = 37749178, pixmap = 12584374, | pixmap = 37749179, mask = 12584375, | mask = 37749180, pict = 12584380, | pict = 37749185, pixmap = 12584381, | pixmap = 37749186, mask = 12584382, | mask = 37749187, pict = 12584387, | pict = 37749192, pixmap = 12584388, | pixmap = 37749193, mask = 12584389, | mask = 37749194, pict = 12584394, | pict = 37749199, pixmap = 12584395, | pixmap = 37749200, mask = 12584396, | mask = 37749201, pict = 12584401, | pict = 37749206, pixmap = 12584402, | pixmap = 37749207, mask = 12584403, | mask = 37749208, pict = 12584408, | pict = 37749213, pixmap = 12584409, | pixmap = 37749214, mask = 12584410, | mask = 37749215, pict = 12584415, | pict = 37749220, pixmap = 12584416, | pixmap = 37749221, mask = 12584417, | mask = 37749222, pict = 12584422, | pict = 37749227, pixmap = 12584423, | pixmap = 37749228, mask = 12584424, | mask = 37749229, pict = 12584429, | pict = 37749234, pixmap = 12584430, | pixmap = 37749235, mask = 12584431, | mask = 37749236, pict = 12584436, | pict = 37749241, pixmap = 12584437, | pixmap = 37749242, mask = 12584438, | mask = 37749243, pict = 12584443, | pict = 37749248, pixmap = 12584444, | pixmap = 37749249, mask = 12584445, | mask = 37749250, pict = 12584450, | pict = 37749255, pixmap = 12584451, | pixmap = 37749256, mask = 12584452, | mask = 37749257, pict = 12584457, | pict = 37749262, pixmap = 12584458, | pixmap = 37749263, mask = 12584459, | mask = 37749264, pict = 12584464, | pict = 37749269, pixmap = 12584465, | pixmap = 37749270, mask = 12584466, | mask = 37749271, pict = 12584471, | pict = 37749276, pixmap = 12584472, | pixmap = 37749277, mask = 12584473, | mask = 37749278, pict = 12584478, | pict = 37749283, pixmap = 12584479, | pixmap = 37749284, mask = 12584480, | mask = 37749285, pict = 12584485, | pict = 37749290, pixmap = 12584486, | pixmap = 37749291, mask = 12584487, | mask = 37749292, pict = 12584492, | pict = 37749297, pixmap = 12584493, | pixmap = 37749298, mask = 12584494, | mask = 37749299, pict = 12584499, | pict = 37749304, pixmap = 12584500, | pixmap = 37749305, mask = 12584501, | mask = 37749306, pict = 12584506, | pict = 37749311, pixmap = 12584507, | pixmap = 37749312, mask = 12584508, | mask = 37749313, pict = 12584513, | pict = 37749318, pixmap = 12584514, | pixmap = 37749319, mask = 12584515, | mask = 37749320, pict = 12584520, | pict = 37749325, pixmap = 12584521, | pixmap = 37749326, mask = 12584522, | mask = 37749327, pict = 12584527, | pict = 37749332, pixmap = 12584528, | pixmap = 37749333, mask = 12584529, | mask = 37749334, pict = 12584534, | pict = 37749339, pixmap = 12584535, | pixmap = 37749340, mask = 12584536, | mask = 37749341, pict = 12584541, | pict = 37749346, pixmap = 12584542, | pixmap = 37749347, mask = 12584543, | mask = 37749348, pict = 12584548, | pict = 37749353, pixmap = 12584549, | pixmap = 37749354, mask = 12584550, | mask = 37749355, pict = 12584555, | pict = 37749360, pixmap = 12584556, | pixmap = 37749361, mask = 12584557, | mask = 37749362, pict = 12584562, | pict = 37749367, pixmap = 12584563, | pixmap = 37749368, mask = 12584564, | mask = 37749369, pict = 12584569, | pict = 37749374, pixmap = 12584570, | pixmap = 37749375, mask = 12584571, | mask = 37749376, pict = 12584576, | pict = 37749381, pixmap = 12584577, | pixmap = 37749382, mask = 12584578, | mask = 37749383, pict = 12584583, | pict = 37749388, pixmap = 12584276, | pixmap = 37749081, mask = 12584277, | mask = 37749082, pict = 12584282, | pict = 37749087, pixmap = 12584283, | pixmap = 37749088, mask = 12584284, | mask = 37749089, pict = 12584289, | pict = 37749094, pixmap = 12584290, | pixmap = 37749095, mask = 12584291, | mask = 37749096, pict = 12584296, | pict = 37749101, pixmap = 12584297, | pixmap = 37749102, mask = 12584298, | mask = 37749103, pict = 12584303, | pict = 37749108, pixmap = 12584304, | pixmap = 37749109, mask = 12584305, | mask = 37749110, pict = 12584310, | pict = 37749115, pixmap = 12584311, | pixmap = 37749116, mask = 12584312, | mask = 37749117, pict = 12584317, | pict = 37749122, pixmap = 12584318, | pixmap = 37749123, mask = 12584319, | mask = 37749124, pict = 12584324, | pict = 37749129, pixmap = 12584325, | pixmap = 37749130, mask = 12584326, | mask = 37749131, pict = 12584331, | pict = 37749136, pixmap = 12584234, | pixmap = 37749034, mask = 12584235, | mask = 37749035, pict = 12584240, | pict = 37749045, pixmap = 12584241, | pixmap = 37749046, mask = 12584242, | mask = 37749047, pict = 12584247, | pict = 37749052, pixmap = 12584248, | pixmap = 37749053, mask = 12584249, | mask = 37749054, pict = 12584254, | pict = 37749059, pixmap = 12584255, | pixmap = 37749060, mask = 12584256, | mask = 37749061, pict = 12584261, | pict = 37749066, pixmap = 12584262, | pixmap = 37749067, mask = 12584263, | mask = 37749068, pict = 12584268, | pict = 37749073, pixmap = 12584269, | pixmap = 37749074, mask = 12584270, | mask = 37749075, pict = 12584275, | pict = 37749080, pixmap = 12584584, | pixmap = 37749389, mask = 12584585, | mask = 37749390, pict = 12584590, | pict = 37749395, pixmap = 12584591, | pixmap = 37749396, mask = 12584592, | mask = 37749397, pict = 12584597, | pict = 37749402, pixmap = 12584598, | pixmap = 37749403, mask = 12584599, | mask = 37749404, pict = 12584604, | pict = 37749409, pixmap = 12584605, | pixmap = 37749410, mask = 12584606, | mask = 37749411, pict = 12584611, | pict = 37749416, pixmap = 12584612, | pixmap = 37749417, mask = 12584613, | mask = 37749418, pict = 12584618, | pict = 37749423, pixmap = 12584619, | pixmap = 37749424, mask = 12584620, | mask = 37749425, pict = 12584625, | pict = 37749430, pixmap = 12584626, | pixmap = 37749431, mask = 12584627, | mask = 37749432, pict = 12584632, | pict = 37749437, pixmap = 12584633, | pixmap = 37749438, mask = 12584634, | mask = 37749439, pict = 12584639, | pict = 37749444, pixmap = 12584640, | pixmap = 37749445, mask = 12584641, | mask = 37749446, pict = 12584646, | pict = 37749451, pixmap = 12584647, | pixmap = 37749452, mask = 12584648, | mask = 37749453, pict = 12584653, | pict = 37749458, window = 12583206, | window = 37749030, window = 12583207, | window = 37749031, window = 12583208, | window = 37749032, window = 12583209, | window = 37749033, xfwm4_win = 12583202, | xfwm4_win = 37749026, shape_win = 12584713, | shape_win = 37749528, margins = {0, 0, 31, 31}, | margins = {0, 0, 0, 0}, button_handler_id = 76, | button_handler_id = 0, startup_sequences = 0x55e608015580 = {0x55e60802d180} | startup_sequences = 0x0, startup_sequence_timeout = 94, | startup_sequence_timeout = 0, root_overlay = 12583637, | root_overlay = 37749461, output = 12583637, | output = 37749461, rootPixmap = {12583652, 0}, | rootPixmap = {0, 0}, rootBuffer = {12583654, 0}, | rootBuffer = {0, 0}, rootPicture = 12583638, | rootPicture = 37749462, blackPicture = 12583640, | blackPicture = 37749464, rootTile = 12584863, | rootTile = 0, allDamage = 12583647, | allDamage = 0, cursorSerial = 163, | cursorSerial = 0, cursorPicture = 12585526, | cursorPicture = 0, cursorOffsetX = 4, | cursorOffsetX = 0, cursorOffsetY = 3, | cursorOffsetY = 0, x = 203, | x = 0, y = 11, | y = 0, width = 24, | width = 0, height = 24 | height = 0 compositor_timeout_id = 114, | compositor_timeout_id = 0, rootTexture = 1, | rootTexture = 0, glx_drawable = 12583657, | glx_drawable = 0, glx_window = 12583642, | glx_window = 37749466, fence = {12583653, 0}, | fence = {0, 0}, Don't you just love object oriented code at times like this?
And one thing that wasn't different but should have been: pid = 2751 --replace does not update this field it seems, perhaps it doesn't matter.
-- GitLab Migration Automatic Message -- This bug has been migrated to xfce.org's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.xfce.org/xfce/xfwm4/-/issues/355. Please create an account or use an existing account on one of our supported OAuth providers. If you want to fork to submit patches and merge requests please continue reading here: https://docs.xfce.org/contribute/dev/git/start#gitlab_forks_and_merge_requests Also feel free to reach out to us on the mailing list https://mail.xfce.org/mailman/listinfo/xfce4-dev