Date: Friday, January 6, 2023 @ 10:47:49
  Author: andyrtr
Revision: 466070

upgpkg: libx11 1.8.3-4: apply upstream commit revert to solve FS#76669; 
FS#69295; FS#76860

Added:
  libx11/trunk/0001-Revert_Update_XPutBackEvent.diff
Modified:
  libx11/trunk/PKGBUILD
Deleted:
  libx11/trunk/176.diff
  libx11/trunk/177.diff

---------------------------------------+
 0001-Revert_Update_XPutBackEvent.diff |   57 +++++++++
 176.diff                              |  189 --------------------------------
 177.diff                              |   32 -----
 PKGBUILD                              |   17 +-
 4 files changed, 63 insertions(+), 232 deletions(-)

Added: 0001-Revert_Update_XPutBackEvent.diff
===================================================================
--- 0001-Revert_Update_XPutBackEvent.diff                               (rev 0)
+++ 0001-Revert_Update_XPutBackEvent.diff       2023-01-06 10:47:49 UTC (rev 
466070)
@@ -0,0 +1,57 @@
+From 88399e01be679bfcc9a5e8922ffe2c47f0e56dee Mon Sep 17 00:00:00 2001
+From: Yuxuan Shui <[email protected]>
+Date: Tue, 3 Jan 2023 15:09:28 +0000
+Subject: [PATCH] Revert "Update XPutBackEvent() to support clients that put
+ back unpadded events"
+
+This reverts commit d6d6cba90215d323567fef13d6565756c9956f60.
+
+The reverted commit intended to fix the problem where an unpadded X
+event struct is passed into XPutBackEvent, by creating a padded struct
+with _XEventToWire and _XWireToEvent. However, _XWireToEvent updates the
+last sequence number in Display, which may cause xlib to complain about
+lost sequence numbers.
+
+IMO, the problem that commit tried to solve is a bug in the client
+library, and workaround it inside Xlib is bad practice, especially given
+the problem it caused. Plus, the offender cited in the original commit
+message, freeglut, has already fixed this problem.
+
+Fixes: #176 #174
+
+Signed-off-by: Yuxuan Shui <[email protected]>
+---
+ src/PutBEvent.c | 15 +--------------
+ 1 file changed, 1 insertion(+), 14 deletions(-)
+
+diff --git a/src/PutBEvent.c b/src/PutBEvent.c
+index f7b74b31..0f9df342 100644
+--- a/src/PutBEvent.c
++++ b/src/PutBEvent.c
+@@ -79,22 +79,9 @@ XPutBackEvent (
+     register XEvent *event)
+       {
+       int ret;
+-      xEvent wire = {0};
+-      XEvent lib = {0};
+-      Status (*fp)(Display *, XEvent *, xEvent *);
+-      int type = event->type & 0177;
+ 
+       LockDisplay(dpy);
+-      fp = dpy->wire_vec[type];
+-      if (fp == NULL)
+-              fp = _XEventToWire;
+-      ret = (*fp)(dpy, event, &wire);
+-      if (ret)
+-      {
+-              ret = (*dpy->event_vec[type])(dpy, &lib, &wire);
+-              if (ret)
+-                      ret = _XPutBackEvent(dpy, &lib);
+-      }
++      ret = _XPutBackEvent(dpy, event);
+       UnlockDisplay(dpy);
+       return ret;
+       }
+-- 
+GitLab
+

Deleted: 176.diff
===================================================================
--- 176.diff    2023-01-06 10:46:06 UTC (rev 466069)
+++ 176.diff    2023-01-06 10:47:49 UTC (rev 466070)
@@ -1,189 +0,0 @@
-diff --git a/include/X11/Xlibint.h b/include/X11/Xlibint.h
-index 
e20c4833c16c6d3518e4b7feb9bdbc606584bfcc..b570bd01c657f4d86f06b414a43e96da4319f729
 100644
---- a/include/X11/Xlibint.h
-+++ b/include/X11/Xlibint.h
-@@ -43,6 +43,10 @@ from The Open Group.
- #include <X11/Xproto.h>               /* to declare xEvent */
- #include <X11/XlibConf.h>     /* for configured options like XTHREADS */
- 
-+#ifdef XTHREADS
-+#include <X11/Xthreads.h>
-+#endif
-+
- /* The Xlib structs are full of implicit padding to properly align members.
-    We can't clean that up without breaking ABI, so tell clang not to bother
-    complaining about it. */
-@@ -207,7 +211,10 @@ struct _XDisplay
- 
-       XIOErrorExitHandler exit_handler;
-       void *exit_handler_data;
--        CARD32 in_ifevent;
-+      CARD32 in_ifevent;
-+#ifdef XTHREADS
-+    xthread_t ifevent_thread;
-+#endif
- };
- 
- #define XAllocIDs(dpy,ids,n) (*(dpy)->idlist_alloc)(dpy,ids,n)
-diff --git a/src/ChkIfEv.c b/src/ChkIfEv.c
-index 
b32c2d3ebcb1aad0e704a3e5dce52dc31971afd2..666366966a0e81bf413a64e015a84da1fcf5cdf0
 100644
---- a/src/ChkIfEv.c
-+++ b/src/ChkIfEv.c
-@@ -49,8 +49,11 @@ Bool XCheckIfEvent (
-       unsigned long qe_serial = 0;
-       int n;                  /* time through count */
- 
--      dpy->in_ifevent++;
-       LockDisplay(dpy);
-+#ifdef XTHREADS
-+      dpy->ifevent_thread = xthread_self();
-+#endif
-+      dpy->in_ifevent++;
-       prev = NULL;
-       for (n = 3; --n >= 0;) {
-           for (qelt = prev ? prev->next : dpy->head;
-diff --git a/src/IfEvent.c b/src/IfEvent.c
-index 
54c37f0031b27f3d7eb629ec2ea16b615b29e734..35c592e3a54d89f1d2ac1efa40c43a04eab1c0c5
 100644
---- a/src/IfEvent.c
-+++ b/src/IfEvent.c
-@@ -48,8 +48,11 @@ XIfEvent (
-       register _XQEvent *qelt, *prev;
-       unsigned long qe_serial = 0;
- 
--      dpy->in_ifevent++;
-       LockDisplay(dpy);
-+#ifdef XTHREADS
-+      dpy->ifevent_thread = xthread_self();
-+#endif
-+      dpy->in_ifevent++;
-       prev = NULL;
-       while (1) {
-           for (qelt = prev ? prev->next : dpy->head;
-diff --git a/src/PeekIfEv.c b/src/PeekIfEv.c
-index 
68c028b70705968c6757c1e70a238886a94adecb..754749a77c0835c0ba3c1aa6edded15dab7fb478
 100644
---- a/src/PeekIfEv.c
-+++ b/src/PeekIfEv.c
-@@ -49,8 +49,11 @@ XPeekIfEvent (
-       register _XQEvent *prev, *qelt;
-       unsigned long qe_serial = 0;
- 
--      dpy->in_ifevent++;
-       LockDisplay(dpy);
-+#ifdef XTHREADS
-+      dpy->ifevent_thread = xthread_self();
-+#endif
-+      dpy->in_ifevent++;
-       prev = NULL;
-       while (1) {
-           for (qelt = prev ? prev->next : dpy->head;
-diff --git a/src/locking.c b/src/locking.c
-index 
c550603e1f5d0601af3fa19c0b8486ef5b1bc30f..642cf9894268dfbbb79a104b42b4097cfd293d82
 100644
---- a/src/locking.c
-+++ b/src/locking.c
-@@ -240,7 +240,9 @@ static void _XUnlockDisplay(
-     if (lock_hist_loc >= LOCK_HIST_SIZE)
-       lock_hist_loc = 0;
- #endif /* XTHREADS_WARN */
--    xmutex_unlock(dpy->lock->mutex);
-+
-+    if (dpy->in_ifevent == 0 || dpy->ifevent_thread != xthread_self())
-+        xmutex_unlock(dpy->lock->mutex);
- }
- 
- 
-@@ -453,63 +455,24 @@ static void _XDisplayLockWait(
- }
- 
- static void _XLockDisplay(
--    Display *dpy
--    XTHREADS_FILE_LINE_ARGS
--    );
--
--static void _XIfEventLockDisplay(
-     Display *dpy
-     XTHREADS_FILE_LINE_ARGS
-     )
- {
--    /* assert(dpy->in_ifevent); */
--}
-+    struct _XErrorThreadInfo *ti;
- 
--static void _XInternalLockDisplay(
--    Display *dpy,
--    Bool wskip
--    XTHREADS_FILE_LINE_ARGS
--    );
-+    if (dpy->in_ifevent && dpy->ifevent_thread == xthread_self())
-+        return;
- 
--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 == 0) {
--      dpy->lock_fns->lock_display = _XLockDisplay;
--      dpy->lock_fns->unlock_display = _XUnlockDisplay;
--      dpy->lock->internal_lock_display = _XInternalLockDisplay;
--      UnlockDisplay(dpy);
--    } else
--      return;
--}
--
--static void _XLockDisplay(
--    Display *dpy
--    XTHREADS_FILE_LINE_ARGS
--    )
--{
--#ifdef XTHREADS
--    struct _XErrorThreadInfo *ti;
--#endif
- #ifdef XTHREADS_WARN
-     _XLockDisplayWarn(dpy, file, line);
- #else
-     xmutex_lock(dpy->lock->mutex);
- #endif
-+
-     if (dpy->lock->locking_level > 0)
--      _XDisplayLockWait(dpy);
--#ifdef XTHREADS
-+    _XDisplayLockWait(dpy);
-+
-     /*
-      * Skip the two function calls below which may generate requests
-      * when LockDisplay is called from within _XError.
-@@ -517,14 +480,9 @@ static void _XLockDisplay(
-     for (ti = dpy->error_threads; ti; ti = ti->next)
-           if (ti->error_thread == xthread_self())
-                   return;
--#endif
-+
-     _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;
--    }
- }
- 
- /*
-@@ -537,6 +495,9 @@ static void _XInternalLockDisplay(
-     XTHREADS_FILE_LINE_ARGS
-     )
- {
-+    if (dpy->in_ifevent && dpy->ifevent_thread == xthread_self())
-+        return;
-+
- #ifdef XTHREADS_WARN
-     _XLockDisplayWarn(dpy, file, line);
- #else

Deleted: 177.diff
===================================================================
--- 177.diff    2023-01-06 10:46:06 UTC (rev 466069)
+++ 177.diff    2023-01-06 10:47:49 UTC (rev 466070)
@@ -1,32 +0,0 @@
-diff --git a/src/PutBEvent.c b/src/PutBEvent.c
-index 
f7b74b31deeba41a47816a53bbccf5319810ffb3..b8273e1adca11f6a7cee0199729a0908c2888937
 100644
---- a/src/PutBEvent.c
-+++ b/src/PutBEvent.c
-@@ -85,15 +85,20 @@ XPutBackEvent (
-       int type = event->type & 0177;
- 
-       LockDisplay(dpy);
--      fp = dpy->wire_vec[type];
--      if (fp == NULL)
--              fp = _XEventToWire;
--      ret = (*fp)(dpy, event, &wire);
--      if (ret)
-+      if (type == GenericEvent)
-+              ret = _XPutBackEvent(dpy, event);
-+      else
-       {
--              ret = (*dpy->event_vec[type])(dpy, &lib, &wire);
-+              fp = dpy->wire_vec[type];
-+              if (fp == NULL)
-+                      fp = _XEventToWire;
-+              ret = (*fp)(dpy, event, &wire);
-               if (ret)
--                      ret = _XPutBackEvent(dpy, &lib);
-+              {
-+                      ret = (*dpy->event_vec[type])(dpy, &lib, &wire);
-+                      if (ret)
-+                              ret = _XPutBackEvent(dpy, &lib);
-+              }
-       }
-       UnlockDisplay(dpy);
-       return ret;

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2023-01-06 10:46:06 UTC (rev 466069)
+++ PKGBUILD    2023-01-06 10:47:49 UTC (rev 466070)
@@ -2,7 +2,7 @@
 
 pkgname=libx11
 pkgver=1.8.3
-pkgrel=3
+pkgrel=4
 pkgdesc="X11 client-side library"
 arch=(x86_64)
 url="https://xorg.freedesktop.org/";
@@ -13,12 +13,10 @@
 license=('custom')
 options=('debug')
 source=(${url}/releases/individual/lib/libX11-${pkgver}.tar.xz{,.sig}
-        176.diff
-        177.diff)
+       0001-Revert_Update_XPutBackEvent.diff)
 
sha512sums=('bc862338fed855986659e9ffa641db6b36c3ac9abced590d1b164e3cc24446671936e3688cdca18393129c4ea41777977eeb37e87d8edc14d6cc5d194a9c0325'
             'SKIP'
-            
'6f5a06e7191b355e5adf48c3391ba66dc2482673b1a485f4c53253c1b800847b9c20c006140b1775644dbd6c77668e588b7df9d6f23aee3e3c9d36b7135c3f8b'
-            
'6c6c1c98f36bffb4f492e83f3e76fa6fe07757dff52d72a891c389e94c53350ab7bd1e07fcaaa6e1eea69b6c1138e2bdc5e7466a58a3de5799bca705db478ab0')
+            
'1db742e84c6373d6ce2273c82e5e9b72d7943eea4ffedc9b99570037072ae2cfdf7cd318bf4d5fc6da908304286068e8ba181f6a12cb21b15d47699e77b51341')
 validpgpkeys=('4A193C06D35E7C670FA4EF0BA2FB9E081F2D130E') # Alan Coopersmith 
<[email protected]>
 #validpgpkeys=('C41C985FDCF1E5364576638B687393EE37D128F8') # Matthieu Herrb 
<[email protected]>
 #validpgpkeys=('3BB639E56F861FA2E86505690FDD682D974CA72A') # Matt Turner 
<[email protected]>
@@ -27,12 +25,9 @@
 
 prepare() {
   cd libX11-${pkgver}
-  # https://gitlab.freedesktop.org/xorg/lib/libx11/-/merge_requests/176
-  # should fix FS#76669
-  patch -Np1 -i ../176.diff
-  # https://gitlab.freedesktop.org/xorg/lib/libx11/-/merge_requests/177
-  # should fix FS#76860
-  patch -Np1 -i ../177.diff
+  # https://gitlab.freedesktop.org/xorg/lib/libx11/-/merge_requests/180 // 
fixes also MR #176/#187
+  # should fix FS#76669; FS#69295; FS#76860
+  patch -Np1 -i ../0001-Revert_Update_XPutBackEvent.diff
 }
 
 build() {

Reply via email to