Hi, I've been preparing various X libraries updates during r2k22. Among them is an update to libX11 1.8.1, which add an unconditional XInitThreads() call during libX11 initialisation.
This is causing a (known) regression in xfce4-settings, causing xfsettingsd to abort. This adds a patch to fix the issue. https://gitlab.xfce.org/xfce/xfce4-settings/-/issues/369 PS: xfsettingd is multi-threaded, and I've no way to be sure that only one thread will do X calls. So it should have been using XInitThreads from the start. diff --git a/x11/xfce4/xfce4-settings/Makefile b/x11/xfce4/xfce4-settings/Makefile index 19532c9036f..28a71cb0eb4 100644 --- a/x11/xfce4/xfce4-settings/Makefile +++ b/x11/xfce4/xfce4-settings/Makefile @@ -2,7 +2,7 @@ COMMENT= Xfce4 settings helpers XFCE_PROJECT= xfce4-settings XFCE_VERSION= 4.16.2 -REVISION= 2 +REVISION= 3 # GPLv2 PERMIT_PACKAGE= Yes diff --git a/x11/xfce4/xfce4-settings/patches/patch-xfsettingsd_xsettings_c b/x11/xfce4/xfce4-settings/patches/patch-xfsettingsd_xsettings_c new file mode 100644 index 00000000000..7a47a5aaf56 --- /dev/null +++ b/x11/xfce4/xfce4-settings/patches/patch-xfsettingsd_xsettings_c @@ -0,0 +1,57 @@ +Fix recursive lock in libX11 + +Index: xfsettingsd/xsettings.c +--- xfsettingsd/xsettings.c.orig ++++ xfsettingsd/xsettings.c +@@ -144,6 +144,12 @@ struct _XfceXSettingsScreen + gint screen_num; + }; + ++struct _XfceTimestamp ++{ ++ Window window; ++ Atom atom; ++}; ++ + + + G_DEFINE_TYPE (XfceXSettingsHelper, xfce_xsettings_helper, G_TYPE_OBJECT); +@@ -1033,11 +1039,11 @@ xfce_xsettings_helper_timestamp_predicate (Display *x + XEvent *xevent, + XPointer arg) + { +- Window window = GPOINTER_TO_UINT (arg); ++ struct _XfceTimestamp *ts = (struct _XfceTimestamp *)arg; + + return (xevent->type == PropertyNotify +- && xevent->xproperty.window == window +- && xevent->xproperty.atom == XInternAtom (xdisplay, "_TIMESTAMP_PROP", False)); ++ && xevent->xproperty.window == ts->window ++ && xevent->xproperty.atom == ts->atom); + } + + +@@ -1046,17 +1052,18 @@ Time + xfce_xsettings_get_server_time (Display *xdisplay, + Window window) + { +- Atom timestamp_atom; ++ struct _XfceTimestamp *ts = g_malloc(sizeof(struct _XfceTimestamp)); + guchar c = 'a'; + XEvent xevent; + + /* get the current xserver timestamp */ +- timestamp_atom = XInternAtom (xdisplay, "_TIMESTAMP_PROP", False); +- XChangeProperty (xdisplay, window, timestamp_atom, timestamp_atom, ++ ts->atom = XInternAtom (xdisplay, "_TIMESTAMP_PROP", False); ++ ts->window = window; ++ XChangeProperty (xdisplay, window, ts->atom, ts->atom, + 8, PropModeReplace, &c, 1); + XIfEvent (xdisplay, &xevent, xfce_xsettings_helper_timestamp_predicate, +- GUINT_TO_POINTER (window)); +- ++ (XPointer)ts); ++ g_free(ts); + return xevent.xproperty.time; + } + -- 2.36.1 -- Matthieu Herrb