- going back to version 1.7.5 for now to get rid of regressions,
which were introduced by trying to get thread-safe in libX11 itself - re-introduced U_fix-a-memory-leak-in-XRegisterIMInstantiateCallback.patch which was not yet in 1.7.5 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/libX11?expand=0&rev=93
This commit is contained in:
parent
e17a686d68
commit
b512dabc48
@ -1,108 +0,0 @@
|
|||||||
From 696d19d5db7bcb1c1f582c2b1846520e7e0870cb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Oliver <halting@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
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
|||||||
From bccd787a565d3a88673bfc06574c1939f98d8d72 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Nia Alarie <nia@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 <wiz@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
|
|
||||||
|
|
@ -1,169 +0,0 @@
|
|||||||
From a9e845809bcaae22496bc8aa3ca252b410d5f39b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Matthieu Herrb <matthieu@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 <ajax@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
|
|
||||||
|
|
@ -1,138 +0,0 @@
|
|||||||
From 70eaf1174e2809d1a6c43868d53f8cd844ef636a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Sibiller <uli42@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 <uli42@gmx.de>
|
|
||||||
Reviewed-by: Alan Coopersmith <alan.coopersmith@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
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
|||||||
From ba095967349dff583bd0989d0ba78aa334e9bedf Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Sibiller <uli42@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 <uli42@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
|
|
||||||
|
|
53
U_fix-a-memory-leak-in-XRegisterIMInstantiateCallback.patch
Normal file
53
U_fix-a-memory-leak-in-XRegisterIMInstantiateCallback.patch
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
From 1d11822601fd24a396b354fa616b04ed3df8b4ef Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Thomas E. Dickey" <dickey@invisible-island.net>
|
||||||
|
Date: Tue, 4 Oct 2022 18:26:17 -0400
|
||||||
|
Subject: [PATCH] fix a memory leak in XRegisterIMInstantiateCallback
|
||||||
|
|
||||||
|
Analysis:
|
||||||
|
|
||||||
|
_XimRegisterIMInstantiateCallback() opens an XIM and closes it using
|
||||||
|
the internal function pointers, but the internal close function does
|
||||||
|
not free the pointer to the XIM (this would be done in XCloseIM()).
|
||||||
|
|
||||||
|
Report/patch:
|
||||||
|
|
||||||
|
Date: Mon, 03 Oct 2022 18:47:32 +0800
|
||||||
|
From: Po Lu <luangruo@yahoo.com>
|
||||||
|
To: xorg-devel@lists.x.org
|
||||||
|
Subject: Re: Yet another leak in Xlib
|
||||||
|
|
||||||
|
For reference, here's how I'm calling XRegisterIMInstantiateCallback:
|
||||||
|
|
||||||
|
XSetLocaleModifiers ("");
|
||||||
|
XRegisterIMInstantiateCallback (compositor.display,
|
||||||
|
XrmGetDatabase (compositor.display),
|
||||||
|
(char *) compositor.resource_name,
|
||||||
|
(char *) compositor.app_name,
|
||||||
|
IMInstantiateCallback, NULL);
|
||||||
|
|
||||||
|
and XMODIFIERS is:
|
||||||
|
|
||||||
|
@im=ibus
|
||||||
|
|
||||||
|
Signed-off-by: Thomas E. Dickey <dickey@invisible-island.net>
|
||||||
|
---
|
||||||
|
modules/im/ximcp/imInsClbk.c | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/modules/im/ximcp/imInsClbk.c b/modules/im/ximcp/imInsClbk.c
|
||||||
|
index 95b379cb..c10e347f 100644
|
||||||
|
--- a/modules/im/ximcp/imInsClbk.c
|
||||||
|
+++ b/modules/im/ximcp/imInsClbk.c
|
||||||
|
@@ -212,6 +212,9 @@ _XimRegisterIMInstantiateCallback(
|
||||||
|
if( xim ) {
|
||||||
|
lock = True;
|
||||||
|
xim->methods->close( (XIM)xim );
|
||||||
|
+ /* XIMs must be freed manually after being opened; close just
|
||||||
|
+ does the protocol to deinitialize the IM. */
|
||||||
|
+ XFree( xim );
|
||||||
|
lock = False;
|
||||||
|
icb->call = True;
|
||||||
|
callback( display, client_data, NULL );
|
||||||
|
--
|
||||||
|
2.35.3
|
||||||
|
|
3
libX11-1.7.5.tar.xz
Normal file
3
libX11-1.7.5.tar.xz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:5a1847e2e2c248e1a203a24a1338a5586d6f48472eac58f6f08539110a965151
|
||||||
|
size 1853152
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:ed91d573d570db83b8ae546f4890dccfcd0b9dfe1e50a1b401b63a74c152ed04
|
|
||||||
size 1823712
|
|
@ -1,3 +1,12 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Dec 5 13:40:36 UTC 2022 - Stefan Dirsch <sndirsch@suse.com>
|
||||||
|
|
||||||
|
- going back to version 1.7.5 for now to get rid of regressions,
|
||||||
|
which were introduced by trying to get thread-safe in libX11
|
||||||
|
itself
|
||||||
|
- re-introduced U_fix-a-memory-leak-in-XRegisterIMInstantiateCallback.patch
|
||||||
|
which was not yet in 1.7.5
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Dec 3 10:20:09 UTC 2022 - Stefan Dirsch <sndirsch@suse.com>
|
Sat Dec 3 10:20:09 UTC 2022 - Stefan Dirsch <sndirsch@suse.com>
|
||||||
|
|
||||||
|
14
libX11.spec
14
libX11.spec
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
|
|
||||||
Name: libX11
|
Name: libX11
|
||||||
Version: 1.8.2
|
Version: 1.7.5
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Core X11 protocol client library
|
Summary: Core X11 protocol client library
|
||||||
License: MIT
|
License: MIT
|
||||||
@ -32,11 +32,7 @@ Patch1: p_xlib_skip_ext_env.diff
|
|||||||
# PATCH-FIX-UPSTREAM en-locales.diff fdo#48596 bnc#388711 -- Add missing data for more en locales
|
# PATCH-FIX-UPSTREAM en-locales.diff fdo#48596 bnc#388711 -- Add missing data for more en locales
|
||||||
Patch2: en-locales.diff
|
Patch2: en-locales.diff
|
||||||
Patch3: u_no-longer-crash-in-XVisualIDFromVisual.patch
|
Patch3: u_no-longer-crash-in-XVisualIDFromVisual.patch
|
||||||
Patch11: U_0001-Add-XFreeThreads-function.patch
|
Patch4: U_fix-a-memory-leak-in-XRegisterIMInstantiateCallback.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: fdupes
|
||||||
BuildRequires: libtool
|
BuildRequires: libtool
|
||||||
BuildRequires: pkgconfig
|
BuildRequires: pkgconfig
|
||||||
@ -140,11 +136,7 @@ test -f nls/ja.S90/XLC_LOCALE.pre && exit 1
|
|||||||
%patch1
|
%patch1
|
||||||
%patch2
|
%patch2
|
||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
%patch11 -p1
|
%patch4 -p1
|
||||||
%patch12 -p1
|
|
||||||
%patch13 -p1
|
|
||||||
%patch14 -p1
|
|
||||||
%patch15 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%configure \
|
%configure \
|
||||||
|
Loading…
Reference in New Issue
Block a user