xserver: Branch 'master'

Keith Packard keithp at kemper.freedesktop.org
Wed Oct 28 18:23:44 PDT 2009


 Xext/shm.c |   17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

New commits:
commit 25979c46b467847ccb54f5c86a1be6b9c303c99a
Author: Jamey Sharp <jamey at minilop.net>
Date:   Wed Oct 28 16:35:28 2009 -0700

    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 <jamey at minilop.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/shm.c b/Xext/shm.c
index 8106c40..9e462f2 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;


More information about the xorg-commit mailing list