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, &copy);
                        *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, &copy);
                        *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

Reply via email to