From 25979c46b467847ccb54f5c86a1be6b9c303c99a Mon Sep 17 00:00:00 2001 From: Jamey Sharp Date: Wed, 28 Oct 2009 16:35:28 -0700 Subject: [PATCH] Alloc/free drawables array for each ProcPanoramiXShmGetImage call. Updates my previous patch, b422b532f3dcab54c53f61a66f2ad76059d1874a. keithp recommended against allocating the drawables array globally, but my updated patch with that fixed isn't the patch that landed. Signed-off-by: Jamey Sharp Signed-off-by: Keith Packard --- Xext/shm.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Xext/shm.c b/Xext/shm.c index 8106c40b6..9e462f216 100644 --- a/Xext/shm.c +++ b/Xext/shm.c @@ -141,7 +141,6 @@ int BadShmSegCode; RESTYPE ShmSegType; static ShmDescPtr Shmsegs; static Bool sharedPixmaps; -static DrawablePtr *drawables; static int shmScrPrivateKeyIndex; static DevPrivateKey shmScrPrivateKey = &shmScrPrivateKeyIndex; static int shmPixmapPrivateIndex; @@ -259,13 +258,6 @@ ShmExtensionInit(INITARGS) } #endif - drawables = xcalloc(screenInfo.numScreens, sizeof(DrawablePtr)); - if (!drawables) - { - ErrorF("MIT-SHM extension disabled: no memory for per-screen drawables\n"); - return; - } - sharedPixmaps = xFalse; { sharedPixmaps = xTrue; @@ -618,6 +610,7 @@ static int ProcPanoramiXShmGetImage(ClientPtr client) { PanoramiXRes *draw; + DrawablePtr *drawables; DrawablePtr pDraw; xShmGetImageReply xgi; ShmDescPtr shmdesc; @@ -678,12 +671,19 @@ ProcPanoramiXShmGetImage(ClientPtr client) return(BadMatch); } + drawables = xcalloc(PanoramiXNumScreens, sizeof(DrawablePtr)); + if(!drawables) + return(BadAlloc); + drawables[0] = pDraw; for(i = 1; i < PanoramiXNumScreens; i++) { rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0, DixReadAccess); if (rc != Success) + { + xfree(drawables); return rc; + } } xgi.visual = wVisual(((WindowPtr)pDraw)); @@ -722,6 +722,7 @@ ProcPanoramiXShmGetImage(ClientPtr client) } } } + xfree(drawables); if (client->swapped) { int n;