From 14c785aa6f809547780edffdb02a7014a8037280 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Wed, 30 Apr 2025 11:38:29 +0200 Subject: [PATCH] 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 --- Xext/shm.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Xext/shm.c b/Xext/shm.c index 725cafc33..5bc7f77f5 100644 --- a/Xext/shm.c +++ b/Xext/shm.c @@ -96,6 +96,7 @@ in this Software without prior written authorization from The Open Group. #endif /* XINERAMA */ typedef struct _ShmScrPrivateRec { + Bool initialized; CloseScreenProcPtr CloseScreen; ShmFuncsPtr shmFuncs; DestroyPixmapProcPtr destroyPixmap; @@ -199,10 +200,10 @@ static Bool ShmCloseScreen(ScreenPtr pScreen) { ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen); - - pScreen->CloseScreen = screen_priv->CloseScreen; - dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, NULL); - free(screen_priv); + if (screen_priv->initialized) { + pScreen->CloseScreen = screen_priv->CloseScreen; + screen_priv->initialized = FALSE; + } return (*pScreen->CloseScreen) (pScreen); } @@ -211,11 +212,10 @@ ShmInitScreenPriv(ScreenPtr pScreen) { ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen); - if (!screen_priv) { - screen_priv = calloc(1, sizeof(ShmScrPrivateRec)); + if (!screen_priv->initialized) { screen_priv->CloseScreen = pScreen->CloseScreen; - dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, screen_priv); pScreen->CloseScreen = ShmCloseScreen; + screen_priv->initialized = TRUE; } return screen_priv; } @@ -223,7 +223,7 @@ ShmInitScreenPriv(ScreenPtr pScreen) static Bool ShmRegisterPrivates(void) { - if (!dixRegisterPrivateKey(&shmScrPrivateKeyRec, PRIVATE_SCREEN, 0)) + if (!dixRegisterPrivateKey(&shmScrPrivateKeyRec, PRIVATE_SCREEN, sizeof(ShmScrPrivateRec))) return FALSE; if (!dixRegisterPrivateKey(&shmPixmapPrivateKeyRec, PRIVATE_PIXMAP, 0)) return FALSE;