Compare commits
5 Commits
master
...
submit/gc-
Author | SHA1 | Date | |
---|---|---|---|
|
968478e5aa | ||
|
6ca37d6c8c | ||
|
b05fc4f013 | ||
|
92fbd59a57 | ||
|
4beeee4e3d |
|
@ -255,4 +255,6 @@ extern Bool enableBackingStore;
|
||||||
/* in generated BuiltInAtoms.c */
|
/* in generated BuiltInAtoms.c */
|
||||||
void MakePredeclaredAtoms(void);
|
void MakePredeclaredAtoms(void);
|
||||||
|
|
||||||
|
void dixFreeAllScreens(void);
|
||||||
|
|
||||||
#endif /* _XSERVER_DIX_PRIV_H */
|
#endif /* _XSERVER_DIX_PRIV_H */
|
||||||
|
|
16
dix/gc.c
16
dix/gc.c
|
@ -768,6 +768,8 @@ int
|
||||||
FreeGC(void *value, XID gid)
|
FreeGC(void *value, XID gid)
|
||||||
{
|
{
|
||||||
GCPtr pGC = (GCPtr) value;
|
GCPtr pGC = (GCPtr) value;
|
||||||
|
if (!pGC)
|
||||||
|
return BadMatch;
|
||||||
|
|
||||||
CloseFont(pGC->font, (Font) 0);
|
CloseFont(pGC->font, (Font) 0);
|
||||||
if (pGC->funcs)
|
if (pGC->funcs)
|
||||||
|
@ -819,13 +821,14 @@ CreateScratchGC(ScreenPtr pScreen, unsigned depth)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
FreeGCperDepth(int screenNum)
|
FreeGCperDepth(ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
ScreenPtr pScreen;
|
|
||||||
GCPtr *ppGC;
|
GCPtr *ppGC;
|
||||||
|
|
||||||
pScreen = screenInfo.screens[screenNum];
|
if (!pScreen)
|
||||||
|
return;
|
||||||
|
|
||||||
ppGC = pScreen->GCperDepth;
|
ppGC = pScreen->GCperDepth;
|
||||||
|
|
||||||
for (i = 0; i <= pScreen->numDepths; i++) {
|
for (i = 0; i <= pScreen->numDepths; i++) {
|
||||||
|
@ -900,13 +903,6 @@ CreateDefaultStipple(int screenNum)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
FreeDefaultStipple(int screenNum)
|
|
||||||
{
|
|
||||||
ScreenPtr pScreen = screenInfo.screens[screenNum];
|
|
||||||
dixDestroyPixmap(pScreen->defaultStipple, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
SetDashes(GCPtr pGC, unsigned offset, unsigned ndash, unsigned char *pdash)
|
SetDashes(GCPtr pGC, unsigned offset, unsigned ndash, unsigned char *pdash)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,14 +22,12 @@ int CopyGC(GCPtr pgcSrc, GCPtr pgcDst, BITS32 mask);
|
||||||
|
|
||||||
int FreeGC(void *pGC, XID gid);
|
int FreeGC(void *pGC, XID gid);
|
||||||
|
|
||||||
void FreeGCperDepth(int screenNum);
|
void FreeGCperDepth(ScreenPtr pScreen);
|
||||||
|
|
||||||
Bool CreateGCperDepth(int screenNum);
|
Bool CreateGCperDepth(int screenNum);
|
||||||
|
|
||||||
Bool CreateDefaultStipple(int screenNum);
|
Bool CreateDefaultStipple(int screenNum);
|
||||||
|
|
||||||
void FreeDefaultStipple(int screenNum);
|
|
||||||
|
|
||||||
int SetDashes(GCPtr pGC, unsigned offset, unsigned ndash, unsigned char *pdash);
|
int SetDashes(GCPtr pGC, unsigned offset, unsigned ndash, unsigned char *pdash);
|
||||||
|
|
||||||
int VerifyRectOrder(int nrects, xRectangle *prects, int ordering);
|
int VerifyRectOrder(int nrects, xRectangle *prects, int ordering);
|
||||||
|
|
21
dix/main.c
21
dix/main.c
|
@ -314,27 +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--) {
|
|
||||||
ScreenPtr pScreen = screenInfo.gpuscreens[i];
|
|
||||||
dixFreeScreenSpecificPrivates(pScreen);
|
|
||||||
(*pScreen->CloseScreen) (pScreen);
|
|
||||||
dixFreePrivates(pScreen->devPrivates, PRIVATE_SCREEN);
|
|
||||||
free(pScreen);
|
|
||||||
screenInfo.numGPUScreens = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = screenInfo.numScreens - 1; i >= 0; i--) {
|
|
||||||
FreeGCperDepth(i);
|
|
||||||
FreeDefaultStipple(i);
|
|
||||||
dixFreeScreenSpecificPrivates(screenInfo.screens[i]);
|
|
||||||
(*screenInfo.screens[i]->CloseScreen) (screenInfo.screens[i]);
|
|
||||||
dixFreePrivates(screenInfo.screens[i]->devPrivates, PRIVATE_SCREEN);
|
|
||||||
free(screenInfo.screens[i]);
|
|
||||||
screenInfo.numScreens = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
ReleaseClientIds(serverClient);
|
ReleaseClientIds(serverClient);
|
||||||
dixFreePrivates(serverClient->devPrivates, PRIVATE_CLIENT);
|
dixFreePrivates(serverClient->devPrivates, PRIVATE_CLIENT);
|
||||||
|
|
|
@ -28,6 +28,7 @@ srcs_dix = [
|
||||||
'registry.c',
|
'registry.c',
|
||||||
'resource.c',
|
'resource.c',
|
||||||
'selection.c',
|
'selection.c',
|
||||||
|
'screen.c',
|
||||||
'swaprep.c',
|
'swaprep.c',
|
||||||
'swapreq.c',
|
'swapreq.c',
|
||||||
'tables.c',
|
'tables.c',
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* SPDX-License-Identifier: MIT OR X11
|
||||||
|
*
|
||||||
|
* Copyright © 2024 Enrico Weigelt, metux IT consult <info@metux.net>
|
||||||
|
*/
|
||||||
|
#include <dix-config.h>
|
||||||
|
|
||||||
|
#include "dix/dix_priv.h"
|
||||||
|
#include "dix/gc_priv.h"
|
||||||
|
#include "include/screenint.h"
|
||||||
|
#include "include/scrnintstr.h"
|
||||||
|
|
||||||
|
static void dixFreeScreen(ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
if (!pScreen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
FreeGCperDepth(pScreen);
|
||||||
|
dixDestroyPixmap(pScreen->defaultStipple, 0);
|
||||||
|
dixFreeScreenSpecificPrivates(pScreen);
|
||||||
|
pScreen->CloseScreen(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));
|
||||||
|
}
|
Loading…
Reference in New Issue