From 968478e5aa4363018cc6c8f7bac9174590a7e346 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Thu, 13 Mar 2025 16:54:20 +0100 Subject: [PATCH] dix: move screen destruction loop into dixFreeAllScreens() Consolidate the screen destruction code in its own function and so move it out of the big main loop. Signed-off-by: Enrico Weigelt, metux IT consult --- dix/dix_priv.h | 2 +- dix/main.c | 14 +------------- dix/screen.c | 17 ++++++++++++++++- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/dix/dix_priv.h b/dix/dix_priv.h index 467961e18..c5cce7b32 100644 --- a/dix/dix_priv.h +++ b/dix/dix_priv.h @@ -255,6 +255,6 @@ extern Bool enableBackingStore; /* in generated BuiltInAtoms.c */ void MakePredeclaredAtoms(void); -void dixFreeScreen(ScreenPtr pScreen); +void dixFreeAllScreens(void); #endif /* _XSERVER_DIX_PRIV_H */ diff --git a/dix/main.c b/dix/main.c index 1347ea5d4..5dbee7fdb 100644 --- a/dix/main.c +++ b/dix/main.c @@ -314,20 +314,8 @@ dix_main(int argc, char *argv[], char *envp[]) screenInfo.screens[i]->root = NullWindow; CloseDownDevices(); - CloseDownEvents(); - - for (i = screenInfo.numGPUScreens - 1; i >= 0; i--) { - dixFreeScreen(screenInfo.gpuscreens[i]); - screenInfo.numGPUScreens = i; - } - memset(&screenInfo.numGPUScreens, 0, sizeof(screenInfo.numGPUScreens)); - - for (i = screenInfo.numScreens - 1; i >= 0; i--) { - dixFreeScreen(screenInfo.screens[i]); - screenInfo.numScreens = i; - } - memset(&screenInfo.screens, 0, sizeof(screenInfo.numGPUScreens)); + dixFreeAllScreens(); ReleaseClientIds(serverClient); dixFreePrivates(serverClient->devPrivates, PRIVATE_CLIENT); diff --git a/dix/screen.c b/dix/screen.c index c6fdfa3dc..fa5ff7d6c 100644 --- a/dix/screen.c +++ b/dix/screen.c @@ -9,7 +9,7 @@ #include "include/screenint.h" #include "include/scrnintstr.h" -void dixFreeScreen(ScreenPtr pScreen) +static void dixFreeScreen(ScreenPtr pScreen) { if (!pScreen) return; @@ -21,3 +21,18 @@ void dixFreeScreen(ScreenPtr pScreen) dixFreePrivates(pScreen->devPrivates, PRIVATE_SCREEN); free(pScreen); } + +void dixFreeAllScreens(void) +{ + for (int i = screenInfo.numGPUScreens - 1; i >= 0; i--) { + dixFreeScreen(screenInfo.gpuscreens[i]); + screenInfo.numGPUScreens = i; + } + memset(&screenInfo.numGPUScreens, 0, sizeof(screenInfo.numGPUScreens)); + + for (int i = screenInfo.numScreens - 1; i >= 0; i--) { + dixFreeScreen(screenInfo.screens[i]); + screenInfo.numScreens = i; + } + memset(&screenInfo.screens, 0, sizeof(screenInfo.numGPUScreens)); +}