shm: use embedded private instead of pointer

The private struct is pretty small and it needs to be allocated anyways,
so save an extra allocation by directly embedding it.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-04-30 11:38:29 +02:00
parent fda404fd15
commit 14c785aa6f

View File

@ -96,6 +96,7 @@ in this Software without prior written authorization from The Open Group.
#endif /* XINERAMA */ #endif /* XINERAMA */
typedef struct _ShmScrPrivateRec { typedef struct _ShmScrPrivateRec {
Bool initialized;
CloseScreenProcPtr CloseScreen; CloseScreenProcPtr CloseScreen;
ShmFuncsPtr shmFuncs; ShmFuncsPtr shmFuncs;
DestroyPixmapProcPtr destroyPixmap; DestroyPixmapProcPtr destroyPixmap;
@ -199,10 +200,10 @@ static Bool
ShmCloseScreen(ScreenPtr pScreen) ShmCloseScreen(ScreenPtr pScreen)
{ {
ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen); ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen);
if (screen_priv->initialized) {
pScreen->CloseScreen = screen_priv->CloseScreen; pScreen->CloseScreen = screen_priv->CloseScreen;
dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, NULL); screen_priv->initialized = FALSE;
free(screen_priv); }
return (*pScreen->CloseScreen) (pScreen); return (*pScreen->CloseScreen) (pScreen);
} }
@ -211,11 +212,10 @@ ShmInitScreenPriv(ScreenPtr pScreen)
{ {
ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen); ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen);
if (!screen_priv) { if (!screen_priv->initialized) {
screen_priv = calloc(1, sizeof(ShmScrPrivateRec));
screen_priv->CloseScreen = pScreen->CloseScreen; screen_priv->CloseScreen = pScreen->CloseScreen;
dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, screen_priv);
pScreen->CloseScreen = ShmCloseScreen; pScreen->CloseScreen = ShmCloseScreen;
screen_priv->initialized = TRUE;
} }
return screen_priv; return screen_priv;
} }
@ -223,7 +223,7 @@ ShmInitScreenPriv(ScreenPtr pScreen)
static Bool static Bool
ShmRegisterPrivates(void) ShmRegisterPrivates(void)
{ {
if (!dixRegisterPrivateKey(&shmScrPrivateKeyRec, PRIVATE_SCREEN, 0)) if (!dixRegisterPrivateKey(&shmScrPrivateKeyRec, PRIVATE_SCREEN, sizeof(ShmScrPrivateRec)))
return FALSE; return FALSE;
if (!dixRegisterPrivateKey(&shmPixmapPrivateKeyRec, PRIVATE_PIXMAP, 0)) if (!dixRegisterPrivateKey(&shmPixmapPrivateKeyRec, PRIVATE_PIXMAP, 0))
return FALSE; return FALSE;