From 557c0b56ae27a4116fcb2a2e39d5058a964be9d6 Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Sat, 1 Nov 2025 22:13:25 +0200 Subject: [PATCH 1/2] dix: partially revert https://github.com/X11Libre/xserver/commit/8399c4e263a94a8cab72acae946b57d5421acc80 Turns out that glx does need this one. Assuming no external modules need this, it should be fine to keep this in a private header. Signed-off-by: stefan11111 --- dix/callback_priv.h | 14 ++++++++++++++ dix/dixutils.c | 14 -------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/dix/callback_priv.h b/dix/callback_priv.h index 284731cf70..f2042c5d55 100644 --- a/dix/callback_priv.h +++ b/dix/callback_priv.h @@ -10,6 +10,20 @@ void InitCallbackManager(void); void DeleteCallbackManager(void); +typedef struct _CallbackRec { + CallbackProcPtr proc; + void *data; + Bool deleted; + struct _CallbackRec *next; +} CallbackRec, *CallbackPtr; + +typedef struct _CallbackList { + int inCallback; + Bool deleted; + int numDeleted; + CallbackPtr list; +} CallbackListRec; + /* * @brief delete a callback list * diff --git a/dix/dixutils.c b/dix/dixutils.c index 901ba78ea0..b1e0c4cfe2 100644 --- a/dix/dixutils.c +++ b/dix/dixutils.c @@ -652,20 +652,6 @@ ClientIsAsleep(ClientPtr client) /* ===== Private Procedures ===== */ -typedef struct _CallbackRec { - CallbackProcPtr proc; - void *data; - Bool deleted; - struct _CallbackRec *next; -} CallbackRec, *CallbackPtr; - -typedef struct _CallbackList { - int inCallback; - Bool deleted; - int numDeleted; - CallbackPtr list; -} CallbackListRec; - static size_t numCallbackListsToCleanup = 0; static CallbackListPtr **listsToCleanup = NULL; From 28b086995fc90330c0dfecd77c468dedbbf0e22f Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Sat, 1 Nov 2025 22:17:02 +0200 Subject: [PATCH 2/2] glx: revert https://github.com/X11Libre/xserver/commit/cb85ceae2dd50fd6469a779f8ba6beb078de58ee This commit broke glx after server reset. Signed-off-by: stefan11111 --- dix/callback_priv.h | 1 - glx/vndext.c | 9 +++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/dix/callback_priv.h b/dix/callback_priv.h index f2042c5d55..64c4fbcce6 100644 --- a/dix/callback_priv.h +++ b/dix/callback_priv.h @@ -33,7 +33,6 @@ typedef struct _CallbackList { * * @param pcbl pointer to the list head (CallbackListPtr) */ -_X_EXPORT /* only for GLX module */ void DeleteCallbackList(CallbackListPtr *pcbl); #endif /* _XSERVER_CALLBACK_PRIV_H */ diff --git a/glx/vndext.c b/glx/vndext.c index a84a8149b3..cb5d6b6e8d 100644 --- a/glx/vndext.c +++ b/glx/vndext.c @@ -49,7 +49,8 @@ Bool noGlxExtension = FALSE; ExtensionEntry *GlxExtensionEntry; int GlxErrorBase = 0; -static CallbackListPtr vndInitCallbackListPtr = NULL; +static CallbackListRec vndInitCallbackList; +static CallbackListPtr vndInitCallbackListPtr = &vndInitCallbackList; static DevPrivateKeyRec glvXGLVScreenPrivKey; static DevPrivateKeyRec glvXGLVClientPrivKey; @@ -199,7 +200,11 @@ GLXReset(ExtensionEntry *extEntry) GlxMappingReset(); if ((dispatchException & DE_TERMINATE) == DE_TERMINATE) { - DeleteCallbackList(&vndInitCallbackListPtr); + while (vndInitCallbackList.list != NULL) { + CallbackPtr next = vndInitCallbackList.list->next; + free(vndInitCallbackList.list); + vndInitCallbackList.list = next; + } } }