From c998f14c760656f492a01a5c133908fce2282d70 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 11 Aug 2025 11:58:10 +0200 Subject: [PATCH] dbe: fix screen cleanup The 2nd loop is supposed to free the privates and also clear the pointer to them. But it instead of clearing the walk'ed pointer, it only clears the one in the last screen left from the upper loop. Signed-off-by: Enrico Weigelt, metux IT consult --- dbe/dbe.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dbe/dbe.c b/dbe/dbe.c index b9a8b7da1f..1f8d43d650 100644 --- a/dbe/dbe.c +++ b/dbe/dbe.c @@ -1270,7 +1270,6 @@ DbeExtensionInit(void) { ExtensionEntry *extEntry; register int i, j; - ScreenPtr pScreen = NULL; DbeScreenPrivPtr pDbeScreenPriv; int nStubbedScreens = 0; Bool ddxInitSuccess; @@ -1303,7 +1302,7 @@ DbeExtensionInit(void) * interface. */ - pScreen = screenInfo.screens[i]; + ScreenPtr pScreen = screenInfo.screens[i]; if (!(pDbeScreenPriv = calloc(1, sizeof(DbeScreenPrivRec)))) { /* If we can not alloc a window or screen private, @@ -1358,8 +1357,8 @@ DbeExtensionInit(void) /* All screens stubbed. Clean up and return. */ for (i = 0; i < screenInfo.numScreens; i++) { - free(dixLookupPrivate(&screenInfo.screens[i]->devPrivates, - dbeScreenPrivKey)); + ScreenPtr pScreen = screenInfo.screens[i]; + free(dixLookupPrivate(&pScreen->devPrivates, dbeScreenPrivKey)); dixSetPrivate(&pScreen->devPrivates, dbeScreenPrivKey, NULL); } return;