From 14094b8867a3f7e7e1012a29da49d5b2cce683d5 Mon Sep 17 00:00:00 2001 From: Patrick J Volkerding Date: Thu, 19 Jan 2023 21:07:32 +0000 Subject: Thu Jan 19 21:07:32 UTC 2023 a/pkgtools-15.1-noarch-4.txz: Rebuilt. makepkg: also let xz decide how many threads to use on ARM platforms aarch64 and riscv64. Thanks to Stuart Winter. installpkg: fix reversed test for if a --threads option was given. It appears that it's been wrong for years but since xz didn't support threaded decompression yet it wasn't noticed. a/xz-5.4.1-x86_64-2.txz: Rebuilt. Reduce default verbosity from V_WARNING to V_ERROR to avoid sending non-fatal memory usage information to stderr. kde/plasma-wayland-protocols-1.10.0-x86_64-1.txz: Upgraded. l/exiv2-0.27.6-x86_64-1.txz: Upgraded. l/tdb-1.4.8-x86_64-1.txz: Upgraded. x/igt-gpu-tools-1.27.1-x86_64-1.txz: Upgraded. x/libX11-1.8.3-x86_64-2.txz: Rebuilt. [PATCH] Fix a9e845 and 797755 Allow X*IfEvent() to reenter libX11 Thanks to marav. --- .../eb1c272ab5230d548077b9f59aca4b3457c3a8f8.patch | 205 +++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 source/x/x11/patch/libX11/eb1c272ab5230d548077b9f59aca4b3457c3a8f8.patch (limited to 'source/x/x11/patch/libX11/eb1c272ab5230d548077b9f59aca4b3457c3a8f8.patch') diff --git a/source/x/x11/patch/libX11/eb1c272ab5230d548077b9f59aca4b3457c3a8f8.patch b/source/x/x11/patch/libX11/eb1c272ab5230d548077b9f59aca4b3457c3a8f8.patch new file mode 100644 index 000000000..badc4e5eb --- /dev/null +++ b/source/x/x11/patch/libX11/eb1c272ab5230d548077b9f59aca4b3457c3a8f8.patch @@ -0,0 +1,205 @@ +From eb1c272ab5230d548077b9f59aca4b3457c3a8f8 Mon Sep 17 00:00:00 2001 +From: GaryOderNichts +Date: Sat, 17 Dec 2022 16:28:40 +0100 +Subject: [PATCH] Fix a9e845 and 797755 Allow X*IfEvent() to reenter libX11 + +--- + include/X11/Xlibint.h | 9 +++++- + src/ChkIfEv.c | 5 +++- + src/IfEvent.c | 5 +++- + src/PeekIfEv.c | 5 +++- + src/locking.c | 65 +++++++++---------------------------------- + 5 files changed, 33 insertions(+), 56 deletions(-) + +diff --git a/include/X11/Xlibint.h b/include/X11/Xlibint.h +index e20c4833..50099b43 100644 +--- a/include/X11/Xlibint.h ++++ b/include/X11/Xlibint.h +@@ -43,6 +43,10 @@ from The Open Group. + #include /* to declare xEvent */ + #include /* for configured options like XTHREADS */ + ++#ifdef XTHREADS ++#include ++#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 b32c2d3e..66636696 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 54c37f00..35c592e3 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 68c028b7..754749a7 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 c550603e..3625bd27 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 || !xthread_equal(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 && xthread_equal(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 && xthread_equal(dpy->ifevent_thread, xthread_self())) ++ return; ++ + #ifdef XTHREADS_WARN + _XLockDisplayWarn(dpy, file, line); + #else +-- +GitLab + -- cgit v1.2.3-79-gdb01