diff options
Diffstat (limited to 'xorg-server/Xext')
-rw-r--r-- | xorg-server/Xext/shm.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/xorg-server/Xext/shm.c b/xorg-server/Xext/shm.c index 10af0b286..6c354a103 100644 --- a/xorg-server/Xext/shm.c +++ b/xorg-server/Xext/shm.c @@ -143,7 +143,6 @@ int BadShmSegCode; RESTYPE ShmSegType;
static ShmDescPtr Shmsegs;
static Bool sharedPixmaps;
-static DrawablePtr *drawables;
static int shmScrPrivateKeyIndex;
static DevPrivateKey shmScrPrivateKey = &shmScrPrivateKeyIndex;
static int shmPixmapPrivateIndex;
@@ -261,13 +260,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;
@@ -637,6 +629,7 @@ static int ProcPanoramiXShmGetImage(ClientPtr client)
{
PanoramiXRes *draw;
+ DrawablePtr *drawables;
DrawablePtr pDraw;
xShmGetImageReply xgi;
ShmDescPtr shmdesc;
@@ -697,12 +690,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));
@@ -741,6 +741,7 @@ ProcPanoramiXShmGetImage(ClientPtr client) }
}
}
+ xfree(drawables);
if (client->swapped) {
int n;
|