Skip to content

Commit 7caaaab

Browse files
committed
[PR #1124] shm: use embedded private instead of pointer
PR: #1124
1 parent 02c37e1 commit 7caaaab

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

Xext/shm.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ in this Software without prior written authorization from The Open Group.
9898

9999

100100
typedef struct _ShmScrPrivateRec {
101+
Bool initialized;
101102
ShmFuncsPtr shmFuncs;
102103
} ShmScrPrivateRec;
103104

@@ -199,28 +200,26 @@ static void
199200
ShmScreenClose(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused)
200201
{
201202
ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen);
202-
203-
dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, NULL);
204-
free(screen_priv);
203+
if (screen_priv->initialized) {
204+
screen_priv->initialized = FALSE;
205+
}
205206
}
206207

207208
static ShmScrPrivateRec *
208209
ShmInitScreenPriv(ScreenPtr pScreen)
209210
{
210211
ShmScrPrivateRec *screen_priv = ShmGetScreenPriv(pScreen);
211212

212-
if (!screen_priv) {
213-
screen_priv = calloc(1, sizeof(ShmScrPrivateRec));
214-
dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, screen_priv);
215-
dixScreenHookClose(pScreen, ShmScreenClose);
213+
if (!screen_priv->initialized) {
214+
screen_priv->initialized = TRUE;
216215
}
217216
return screen_priv;
218217
}
219218

220219
static Bool
221220
ShmRegisterPrivates(void)
222221
{
223-
if (!dixRegisterPrivateKey(&shmScrPrivateKeyRec, PRIVATE_SCREEN, 0))
222+
if (!dixRegisterPrivateKey(&shmScrPrivateKeyRec, PRIVATE_SCREEN, sizeof(ShmScrPrivateRec)))
224223
return FALSE;
225224
if (!dixRegisterPrivateKey(&shmPixmapPrivateKeyRec, PRIVATE_PIXMAP, 0))
226225
return FALSE;

0 commit comments

Comments
 (0)