From eb967ca36cfe0409972ac987a74d498cd6f6bafb Mon Sep 17 00:00:00 2001 From: Rami Ylimaki Date: Tue, 17 Nov 2009 17:13:43 +0200 Subject: [PATCH] Xext: Fix a memory leak on GE client disconnect. Add a call to dixRequestPrivate to inform dixFreePrivates that memory allocated in GEClientCallback should be released when client disconnects. Otherwise there is a leak of sizeof(GEClientInfoRec) for every client connect/disconnect. Also remove the explicit allocation and let GEGetClient / dixLookupPrivate do it. This makes GEClientCallback similar to the other extension callbacks. Signed-off-by: Rami Ylimaki Signed-off-by: Peter Hutterer --- Xext/geext.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Xext/geext.c b/Xext/geext.c index 6fad4aec0..2ba0ca824 100644 --- a/Xext/geext.c +++ b/Xext/geext.c @@ -168,12 +168,6 @@ GEClientCallback(CallbackListPtr *list, ClientPtr pClient = clientinfo->client; GEClientInfoPtr pGEClient = GEGetClient(pClient); - if (pGEClient == NULL) - { - pGEClient = xcalloc(1, sizeof(GEClientInfoRec)); - dixSetPrivate(&pClient->devPrivates, GEClientPrivateKey, pGEClient); - } - pGEClient->major_version = 0; pGEClient->minor_version = 0; } @@ -222,6 +216,9 @@ GEExtensionInit(void) { ExtensionEntry *extEntry; + if (!dixRequestPrivate(GEClientPrivateKey, sizeof(GEClientInfoRec))) + FatalError("GEExtensionInit: GE private request failed.\n"); + if(!AddCallback(&ClientStateCallback, GEClientCallback, 0)) { FatalError("GEExtensionInit: register client callback failed.\n");