aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/src/XlibAsync.c
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2023-04-27 14:10:57 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2023-04-27 14:10:57 +0200
commit91d9218c0cc659f40918af6ac6c035c6c48d2c6d (patch)
tree79054df1730d4723658b02cec311bc8ba7655662 /nx-X11/lib/src/XlibAsync.c
parenta502149a844736dcc7f7dedd7c63229c74a448ee (diff)
parent4875a15ca61358a1c95b156b2279fce092451278 (diff)
downloadnx-libs-91d9218c0cc659f40918af6ac6c035c6c48d2c6d.tar.gz
nx-libs-91d9218c0cc659f40918af6ac6c035c6c48d2c6d.tar.bz2
nx-libs-91d9218c0cc659f40918af6ac6c035c6c48d2c6d.zip
Merge branch 'uli42-pr/update_libX11_2022' into 3.6.x
Attributes GH PR #1037: https://github.com/ArcticaProject/nx-libs/pull/1037
Diffstat (limited to 'nx-X11/lib/src/XlibAsync.c')
-rw-r--r--nx-X11/lib/src/XlibAsync.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/nx-X11/lib/src/XlibAsync.c b/nx-X11/lib/src/XlibAsync.c
index 2e528d8b1..b9a5d90ab 100644
--- a/nx-X11/lib/src/XlibAsync.c
+++ b/nx-X11/lib/src/XlibAsync.c
@@ -57,6 +57,18 @@ from The Open Group.
#include <nx-X11/Xlibint.h>
#include <nx-X11/Xos.h>
+/*
+ * Xlib's _XAsyncErrorState sequence number may wrap in 32bit
+ * and we cannot use 64bit as it's public API.
+ */
+#ifdef LONG64
+#define _XLIB_ASYNC_SEQUENCE_CMP(a,op,b) ((a == 0) || (a op b))
+#else /* !LONG64 */
+#define _XLIB_ASYNC_SEQUENCE_CMP(a,op,b) ((a == 0) || \
+ (((a op b) && (b - a op (UINT32_MAX >> 1))) || \
+ ((b op a) && ((UINT32_MAX >> 1) op a - b))))
+#endif /* !LONG64 */
+
/*ARGSUSED*/
Bool
_XAsyncErrorHandler(
@@ -76,10 +88,8 @@ _XAsyncErrorHandler(
rep->error.majorCode == state->major_opcode) &&
(!state->minor_opcode ||
rep->error.minorCode == state->minor_opcode) &&
- (!state->min_sequence_number ||
- (state->min_sequence_number <= dpy->last_request_read)) &&
- (!state->max_sequence_number ||
- (state->max_sequence_number >= dpy->last_request_read))) {
+ (_XLIB_ASYNC_SEQUENCE_CMP(state->min_sequence_number,<=,dpy->last_request_read)) &&
+ (_XLIB_ASYNC_SEQUENCE_CMP(state->max_sequence_number,>=,dpy->last_request_read))) {
state->last_error_received = rep->error.errorCode;
state->error_count++;
return True;