From b92d86a982504af2605042c19ef796d135074ee1 Mon Sep 17 00:00:00 2001 From: Brendan King Date: Thu, 24 Apr 2014 11:37:47 +0100 Subject: [PATCH] dix: fix pixmap leak on server reset The server is leaking a pixmap (created by CreateDefaultStipple()) on reset. The leak is caused by some X Server graphics contexts not being freed on reset by the machine independent cursor code in the server, which in turn is caused by the cursor cleanup code (miSpriteDeviceCursorCleanup()) not being called. Ensures the DeviceCursorCleanup() function is called when the associated input device is closed on server reset. Signed-off-by: Frank Binns Reviewed-by: Keith Packard Signed-off-by: Keith Packard --- dix/devices.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dix/devices.c b/dix/devices.c index 73f60f4..7f079ff 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -946,8 +946,9 @@ CloseDevice(DeviceIntPtr dev) if (dev->inited) (void) (*dev->deviceProc) (dev, DEVICE_CLOSE); - /* free sprite memory */ - if (IsMaster(dev) && dev->spriteInfo->sprite) + FreeSprite(dev); + + if (IsMaster(dev)) screen->DeviceCursorCleanup(dev, screen); /* free acceleration info */ @@ -968,8 +969,6 @@ CloseDevice(DeviceIntPtr dev) free(classes); } - FreeSprite(dev); - /* a client may have the device set as client pointer */ for (j = 0; j < currentMaxClients; j++) { if (clients[j] && clients[j]->clientPtr == dev) { -- 2.7.4