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() {
