Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libX11 for openSUSE:Factory checked in at 2022-12-04 14:57:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libX11 (Old) and /work/SRC/openSUSE:Factory/.libX11.new.1835 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libX11" Sun Dec 4 14:57:59 2022 rev:44 rq:1039777 version:1.8.2 Changes: -------- --- /work/SRC/openSUSE:Factory/libX11/libX11.changes 2022-12-03 10:03:28.567186818 +0100 +++ /work/SRC/openSUSE:Factory/.libX11.new.1835/libX11.changes 2022-12-04 14:58:11.856216079 +0100 @@ -1,0 +2,14 @@ +Sat Dec 3 10:20:09 UTC 2022 - Stefan Dirsch <sndir...@suse.com> + +- U_0001-Add-XFreeThreads-function.patch + U_0002-Don-t-use-pragma-inside-a-function-it-breaks-compili.patch + U_0003-Fix-797755-Allow-X-IfEvent-to-reenter-libX11.patch + U_0004-Indentation-fixes-around-recent-dpy-in_ifevent-chang.patch + U_0005-ChkIfEv.c-fix-wrong-handling-of-dpy-in_ifevent.patch + * adding all patches since 1.8.2 release in order to try fixing + regressions after introducing thread safety constructor with + 1.8.1 (boo#1205778, boo#1205818) +- supersedes U_Fix-797755-Allow-X-IfEvent-to-reenter-libX11.patch +- re-enabled thread safe constructor + +------------------------------------------------------------------- Old: ---- U_Fix-797755-Allow-X-IfEvent-to-reenter-libX11.patch New: ---- U_0001-Add-XFreeThreads-function.patch U_0002-Don-t-use-pragma-inside-a-function-it-breaks-compili.patch U_0003-Fix-797755-Allow-X-IfEvent-to-reenter-libX11.patch U_0004-Indentation-fixes-around-recent-dpy-in_ifevent-chang.patch U_0005-ChkIfEv.c-fix-wrong-handling-of-dpy-in_ifevent.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libX11.spec ++++++ --- /var/tmp/diff_new_pack.fuUl4A/_old 2022-12-04 14:58:12.356218959 +0100 +++ /var/tmp/diff_new_pack.fuUl4A/_new 2022-12-04 14:58:12.360218983 +0100 @@ -32,7 +32,11 @@ # PATCH-FIX-UPSTREAM en-locales.diff fdo#48596 bnc#388711 -- Add missing data for more en locales Patch2: en-locales.diff Patch3: u_no-longer-crash-in-XVisualIDFromVisual.patch -Patch4: U_Fix-797755-Allow-X-IfEvent-to-reenter-libX11.patch +Patch11: U_0001-Add-XFreeThreads-function.patch +Patch12: U_0002-Don-t-use-pragma-inside-a-function-it-breaks-compili.patch +Patch13: U_0003-Fix-797755-Allow-X-IfEvent-to-reenter-libX11.patch +Patch14: U_0004-Indentation-fixes-around-recent-dpy-in_ifevent-chang.patch +Patch15: U_0005-ChkIfEv.c-fix-wrong-handling-of-dpy-in_ifevent.patch BuildRequires: fdupes BuildRequires: libtool BuildRequires: pkgconfig @@ -136,13 +140,16 @@ %patch1 %patch2 %patch3 -p1 -%patch4 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 %build %configure \ --disable-silent-rules \ --docdir=%{_docdir}/%{name} \ - --disable-thread-safety-constructor \ --disable-static make %{?_smp_mflags} ++++++ U_0001-Add-XFreeThreads-function.patch ++++++ >From 696d19d5db7bcb1c1f582c2b1846520e7e0870cb Mon Sep 17 00:00:00 2001 From: Oliver <halt...@riseup.net> Date: Fri, 11 Nov 2022 17:04:00 +0000 Subject: [PATCH 1/5] Add XFreeThreads function. --- include/X11/Xlib.h | 4 ++++ man/XInitThreads.man | 8 +++++++- src/globals.c | 6 ++++++ src/locking.c | 23 +++++++++++++++++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/include/X11/Xlib.h b/include/X11/Xlib.h index f62fb470..29ea5715 100644 --- a/include/X11/Xlib.h +++ b/include/X11/Xlib.h @@ -1735,6 +1735,10 @@ extern Status XInitThreads( void ); +extern Status XFreeThreads( + void +); + extern void XLockDisplay( Display* /* display */ ); diff --git a/man/XInitThreads.man b/man/XInitThreads.man index 4ae95228..b629bd28 100644 --- a/man/XInitThreads.man +++ b/man/XInitThreads.man @@ -52,6 +52,8 @@ XInitThreads, XLockDisplay, XUnlockDisplay \- multi-threading support .HP Status XInitThreads\^(void); .HP +Status XFreeThreads\^(void); +.HP void XLockDisplay\^(\^Display *\fIdisplay\fP\^); .HP void XUnlockDisplay\^(\^Display *\fIdisplay\fP\^); @@ -76,7 +78,11 @@ are protected by some other access mechanism (for example, a mutual exclusion lock in a toolkit or through explicit client programming), Xlib thread initialization is not required. It is recommended that single-threaded programs not call this function. - +.LP +The +.B XFreeThreads +function frees the memory allocated by +.BR XInitThreads . .LP The .B XLockDisplay diff --git a/src/globals.c b/src/globals.c index 66b589fe..c07de431 100644 --- a/src/globals.c +++ b/src/globals.c @@ -105,4 +105,10 @@ xlib_ctor(void) { XInitThreads(); } + +__attribute__((destructor)) static void +xlib_dtor(void) +{ + XFreeThreads(); +} #endif diff --git a/src/locking.c b/src/locking.c index 36530691..bdc07011 100644 --- a/src/locking.c +++ b/src/locking.c @@ -673,9 +673,32 @@ Status XInitThreads(void) return 1; } +Status XFreeThreads(void) +{ + if (global_lock.lock != NULL) { + xmutex_free(global_lock.lock); + global_lock.lock = NULL; + } + if (i18n_lock.lock != NULL) { + xmutex_free(i18n_lock.lock); + i18n_lock.lock = NULL; + } + if (conv_lock.lock != NULL) { + xmutex_free(conv_lock.lock); + conv_lock.lock = NULL; + } + + return 1; +} + #else /* XTHREADS */ Status XInitThreads(void) { return 0; } + +Status XFreeThreads(void) +{ + return 0; +} #endif /* XTHREADS */ -- 2.35.3 ++++++ U_0002-Don-t-use-pragma-inside-a-function-it-breaks-compili.patch ++++++ >From bccd787a565d3a88673bfc06574c1939f98d8d72 Mon Sep 17 00:00:00 2001 From: Nia Alarie <n...@netbsd.org> Date: Thu, 10 Nov 2022 22:31:47 +0100 Subject: [PATCH 2/5] Don't use pragma inside a function, it breaks compiling with older GCCs. XKBBind.c:230: error: #pragma GCC diagnostic not allowed inside functions Signed-off-by: Thomas Klausner <w...@gatalith.at> --- src/xkb/XKBBind.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/xkb/XKBBind.c b/src/xkb/XKBBind.c index a63c86ea..467e4198 100644 --- a/src/xkb/XKBBind.c +++ b/src/xkb/XKBBind.c @@ -202,6 +202,14 @@ XkbKeysymToModifiers(Display *dpy, KeySym ks) return mods; } +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +#elif defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + KeySym XLookupKeysym(register XKeyEvent * event, int col) { @@ -211,22 +219,15 @@ XLookupKeysym(register XKeyEvent * event, int col) return _XLookupKeysym(event, col); _XkbCheckPendingRefresh(dpy, dpy->xkb_info); -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -#elif defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif return XKeycodeToKeysym(dpy, event->keycode, col); +} + #ifdef __clang__ #pragma clang diagnostic pop #elif defined(__GNUC__) #pragma GCC diagnostic pop #endif -} - /* * Not a public entry point -- XkbTranslateKey is an obsolete name * that is preserved here so that functions linked against the old -- 2.35.3 ++++++ U_0003-Fix-797755-Allow-X-IfEvent-to-reenter-libX11.patch ++++++ >From a9e845809bcaae22496bc8aa3ca252b410d5f39b Mon Sep 17 00:00:00 2001 From: Matthieu Herrb <matth...@herrb.eu> Date: Fri, 11 Nov 2022 18:55:23 +0100 Subject: [PATCH 3/5] Fix 797755 Allow X*IfEvent() to reenter libX11 - the activation logic is reversed - there is also _XInternalLockDisplay() that needs protection - I've found cases (in fvwm2) where the callback calls XCheckIfEvent() recursively. So the flag needs to be a counter. Reviewed-by: Adam Jackson <a...@redhat.com> --- include/X11/Xlibint.h | 2 +- src/ChkIfEv.c | 4 ++-- src/IfEvent.c | 4 ++-- src/OpenDis.c | 2 +- src/PeekIfEv.c | 4 ++-- src/locking.c | 27 ++++++++++++++++++++++----- 6 files changed, 30 insertions(+), 13 deletions(-) diff --git a/include/X11/Xlibint.h b/include/X11/Xlibint.h index b4275ebd..e20c4833 100644 --- a/include/X11/Xlibint.h +++ b/include/X11/Xlibint.h @@ -207,7 +207,7 @@ struct _XDisplay XIOErrorExitHandler exit_handler; void *exit_handler_data; - Bool in_ifevent; + CARD32 in_ifevent; }; #define XAllocIDs(dpy,ids,n) (*(dpy)->idlist_alloc)(dpy,ids,n) diff --git a/src/ChkIfEv.c b/src/ChkIfEv.c index 327b5eaf..1bbcba5b 100644 --- a/src/ChkIfEv.c +++ b/src/ChkIfEv.c @@ -49,8 +49,8 @@ Bool XCheckIfEvent ( unsigned long qe_serial = 0; int n; /* time through count */ + dpy->in_ifevent++; LockDisplay(dpy); - dpy->in_ifevent = True; prev = NULL; for (n = 3; --n >= 0;) { for (qelt = prev ? prev->next : dpy->head; @@ -80,7 +80,7 @@ Bool XCheckIfEvent ( /* another thread has snatched this event */ prev = NULL; } - dpy->in_ifevent = False; + dpy->in_ifevent--; UnlockDisplay(dpy); return False; } diff --git a/src/IfEvent.c b/src/IfEvent.c index a0aed7e3..593e7acf 100644 --- a/src/IfEvent.c +++ b/src/IfEvent.c @@ -48,8 +48,8 @@ XIfEvent ( register _XQEvent *qelt, *prev; unsigned long qe_serial = 0; + dpy->in_ifevent++; LockDisplay(dpy); - dpy->in_ifevent = True; prev = NULL; while (1) { for (qelt = prev ? prev->next : dpy->head; @@ -60,7 +60,7 @@ XIfEvent ( *event = qelt->event; _XDeq(dpy, prev, qelt); _XStoreEventCookie(dpy, event); - dpy->in_ifevent = False; + dpy->in_ifevent--; UnlockDisplay(dpy); return 0; } diff --git a/src/OpenDis.c b/src/OpenDis.c index e1bc2a30..17dc4cb2 100644 --- a/src/OpenDis.c +++ b/src/OpenDis.c @@ -189,7 +189,7 @@ XOpenDisplay ( dpy->xcmisc_opcode = 0; dpy->xkb_info = NULL; dpy->exit_handler_data = NULL; - dpy->in_ifevent = False; + dpy->in_ifevent = 0; /* * Setup other information in this display structure. diff --git a/src/PeekIfEv.c b/src/PeekIfEv.c index c4e8af0d..7e09c00b 100644 --- a/src/PeekIfEv.c +++ b/src/PeekIfEv.c @@ -49,8 +49,8 @@ XPeekIfEvent ( register _XQEvent *prev, *qelt; unsigned long qe_serial = 0; + dpy->in_ifevent++; LockDisplay(dpy); - dpy->in_ifevent = True; prev = NULL; while (1) { for (qelt = prev ? prev->next : dpy->head; @@ -64,7 +64,7 @@ XPeekIfEvent ( _XStoreEventCookie(dpy, ©); *event = copy; } - dpy->in_ifevent = False; + dpy->in_ifevent--; UnlockDisplay(dpy); return 0; } diff --git a/src/locking.c b/src/locking.c index bdc07011..690b2bf6 100644 --- a/src/locking.c +++ b/src/locking.c @@ -465,17 +465,33 @@ static void _XIfEventLockDisplay( /* assert(dpy->in_ifevent); */ } +static void _XInternalLockDisplay( + Display *dpy, + Bool wskip + XTHREADS_FILE_LINE_ARGS + ); + +static void _XIfEventInternalLockDisplay( + Display *dpy, + Bool wskip + XTHREADS_FILE_LINE_ARGS + ) +{ + /* assert(dpy->in_ifevent); */ +} + static void _XIfEventUnlockDisplay( Display *dpy XTHREADS_FILE_LINE_ARGS ) { - if (dpy->in_ifevent) + if (dpy->in_ifevent == 0) { + dpy->lock_fns->lock_display = _XLockDisplay; + dpy->lock_fns->unlock_display = _XUnlockDisplay; + dpy->lock->internal_lock_display = _XInternalLockDisplay; + UnlockDisplay(dpy); + } else return; - - dpy->lock_fns->lock_display = _XLockDisplay; - dpy->lock_fns->unlock_display = _XUnlockDisplay; - UnlockDisplay(dpy); } static void _XLockDisplay( @@ -507,6 +523,7 @@ static void _XLockDisplay( if (dpy->in_ifevent) { dpy->lock_fns->lock_display = _XIfEventLockDisplay; dpy->lock_fns->unlock_display = _XIfEventUnlockDisplay; + dpy->lock->internal_lock_display = _XIfEventInternalLockDisplay; } } -- 2.35.3 ++++++ U_0004-Indentation-fixes-around-recent-dpy-in_ifevent-chang.patch ++++++ >From 70eaf1174e2809d1a6c43868d53f8cd844ef636a Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller <ul...@gmx.de> Date: Wed, 30 Nov 2022 23:42:02 +0100 Subject: [PATCH 4/5] Indentation fixes around recent dpy->in_ifevent changes Use the same indentation as the surrounding code. Signed-off-by: Ulrich Sibiller <ul...@gmx.de> Reviewed-by: Alan Coopersmith <alan.coopersm...@oracle.com> --- src/ChkIfEv.c | 6 +++--- src/IfEvent.c | 6 +++--- src/OpenDis.c | 2 +- src/PeekIfEv.c | 4 ++-- src/locking.c | 16 ++++++++-------- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/ChkIfEv.c b/src/ChkIfEv.c index 1bbcba5b..eba36941 100644 --- a/src/ChkIfEv.c +++ b/src/ChkIfEv.c @@ -49,8 +49,8 @@ Bool XCheckIfEvent ( unsigned long qe_serial = 0; int n; /* time through count */ - dpy->in_ifevent++; - LockDisplay(dpy); + dpy->in_ifevent++; + LockDisplay(dpy); prev = NULL; for (n = 3; --n >= 0;) { for (qelt = prev ? prev->next : dpy->head; @@ -80,7 +80,7 @@ Bool XCheckIfEvent ( /* another thread has snatched this event */ prev = NULL; } - dpy->in_ifevent--; + dpy->in_ifevent--; UnlockDisplay(dpy); return False; } diff --git a/src/IfEvent.c b/src/IfEvent.c index 593e7acf..54c37f00 100644 --- a/src/IfEvent.c +++ b/src/IfEvent.c @@ -48,8 +48,8 @@ XIfEvent ( register _XQEvent *qelt, *prev; unsigned long qe_serial = 0; - dpy->in_ifevent++; - LockDisplay(dpy); + dpy->in_ifevent++; + LockDisplay(dpy); prev = NULL; while (1) { for (qelt = prev ? prev->next : dpy->head; @@ -60,7 +60,7 @@ XIfEvent ( *event = qelt->event; _XDeq(dpy, prev, qelt); _XStoreEventCookie(dpy, event); - dpy->in_ifevent--; + dpy->in_ifevent--; UnlockDisplay(dpy); return 0; } diff --git a/src/OpenDis.c b/src/OpenDis.c index 17dc4cb2..7c8d4e1a 100644 --- a/src/OpenDis.c +++ b/src/OpenDis.c @@ -189,7 +189,7 @@ XOpenDisplay ( dpy->xcmisc_opcode = 0; dpy->xkb_info = NULL; dpy->exit_handler_data = NULL; - dpy->in_ifevent = 0; + dpy->in_ifevent = 0; /* * Setup other information in this display structure. diff --git a/src/PeekIfEv.c b/src/PeekIfEv.c index 7e09c00b..68c028b7 100644 --- a/src/PeekIfEv.c +++ b/src/PeekIfEv.c @@ -49,7 +49,7 @@ XPeekIfEvent ( register _XQEvent *prev, *qelt; unsigned long qe_serial = 0; - dpy->in_ifevent++; + dpy->in_ifevent++; LockDisplay(dpy); prev = NULL; while (1) { @@ -64,7 +64,7 @@ XPeekIfEvent ( _XStoreEventCookie(dpy, ©); *event = copy; } - dpy->in_ifevent--; + dpy->in_ifevent--; UnlockDisplay(dpy); return 0; } diff --git a/src/locking.c b/src/locking.c index 690b2bf6..c550603e 100644 --- a/src/locking.c +++ b/src/locking.c @@ -486,12 +486,12 @@ static void _XIfEventUnlockDisplay( ) { if (dpy->in_ifevent == 0) { - dpy->lock_fns->lock_display = _XLockDisplay; - dpy->lock_fns->unlock_display = _XUnlockDisplay; - dpy->lock->internal_lock_display = _XInternalLockDisplay; - UnlockDisplay(dpy); + dpy->lock_fns->lock_display = _XLockDisplay; + dpy->lock_fns->unlock_display = _XUnlockDisplay; + dpy->lock->internal_lock_display = _XInternalLockDisplay; + UnlockDisplay(dpy); } else - return; + return; } static void _XLockDisplay( @@ -521,9 +521,9 @@ static void _XLockDisplay( _XIDHandler(dpy); _XSeqSyncFunction(dpy); if (dpy->in_ifevent) { - dpy->lock_fns->lock_display = _XIfEventLockDisplay; - dpy->lock_fns->unlock_display = _XIfEventUnlockDisplay; - dpy->lock->internal_lock_display = _XIfEventInternalLockDisplay; + dpy->lock_fns->lock_display = _XIfEventLockDisplay; + dpy->lock_fns->unlock_display = _XIfEventUnlockDisplay; + dpy->lock->internal_lock_display = _XIfEventInternalLockDisplay; } } -- 2.35.3 ++++++ U_0005-ChkIfEv.c-fix-wrong-handling-of-dpy-in_ifevent.patch ++++++ >From ba095967349dff583bd0989d0ba78aa334e9bedf Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller <ul...@gmx.de> Date: Wed, 30 Nov 2022 23:47:29 +0100 Subject: [PATCH 5/5] ChkIfEv.c: fix wrong handling of dpy->in_ifevent Is no longer a bool but a counter. Signed-off-by: Ulrich Sibiller <ul...@gmx.de> --- src/ChkIfEv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ChkIfEv.c b/src/ChkIfEv.c index eba36941..b32c2d3e 100644 --- a/src/ChkIfEv.c +++ b/src/ChkIfEv.c @@ -61,7 +61,7 @@ Bool XCheckIfEvent ( *event = qelt->event; _XDeq(dpy, prev, qelt); _XStoreEventCookie(dpy, event); - dpy->in_ifevent = False; + dpy->in_ifevent--; UnlockDisplay(dpy); return True; } -- 2.35.3