(!1905) 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 <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-03-13 16:54:20 +01:00
parent 4fafa59389
commit 7e885509bb
3 changed files with 19 additions and 14 deletions

View File

@ -263,4 +263,6 @@ void SetCriticalEvent(int event);
void dixFreeScreen(ScreenPtr pScreen); void dixFreeScreen(ScreenPtr pScreen);
void dixFreeAllScreens(void);
#endif /* _XSERVER_DIX_PRIV_H */ #endif /* _XSERVER_DIX_PRIV_H */

View File

@ -314,20 +314,8 @@ dix_main(int argc, char *argv[], char *envp[])
screenInfo.screens[i]->root = NullWindow; screenInfo.screens[i]->root = NullWindow;
CloseDownDevices(); CloseDownDevices();
CloseDownEvents(); CloseDownEvents();
dixFreeAllScreens();
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));
ReleaseClientIds(serverClient); ReleaseClientIds(serverClient);
dixFreePrivates(serverClient->devPrivates, PRIVATE_CLIENT); dixFreePrivates(serverClient->devPrivates, PRIVATE_CLIENT);

View File

@ -9,7 +9,7 @@
#include "include/screenint.h" #include "include/screenint.h"
#include "include/scrnintstr.h" #include "include/scrnintstr.h"
void dixFreeScreen(ScreenPtr pScreen) static void dixFreeScreen(ScreenPtr pScreen)
{ {
if (!pScreen) if (!pScreen)
return; return;
@ -21,3 +21,18 @@ void dixFreeScreen(ScreenPtr pScreen)
dixFreePrivates(pScreen->devPrivates, PRIVATE_SCREEN); dixFreePrivates(pScreen->devPrivates, PRIVATE_SCREEN);
free(pScreen); 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));
}