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 <ext-rami.ylimaki@nokia.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
55f60e1923
commit
eb967ca36c
|
@ -168,12 +168,6 @@ GEClientCallback(CallbackListPtr *list,
|
||||||
ClientPtr pClient = clientinfo->client;
|
ClientPtr pClient = clientinfo->client;
|
||||||
GEClientInfoPtr pGEClient = GEGetClient(pClient);
|
GEClientInfoPtr pGEClient = GEGetClient(pClient);
|
||||||
|
|
||||||
if (pGEClient == NULL)
|
|
||||||
{
|
|
||||||
pGEClient = xcalloc(1, sizeof(GEClientInfoRec));
|
|
||||||
dixSetPrivate(&pClient->devPrivates, GEClientPrivateKey, pGEClient);
|
|
||||||
}
|
|
||||||
|
|
||||||
pGEClient->major_version = 0;
|
pGEClient->major_version = 0;
|
||||||
pGEClient->minor_version = 0;
|
pGEClient->minor_version = 0;
|
||||||
}
|
}
|
||||||
|
@ -222,6 +216,9 @@ GEExtensionInit(void)
|
||||||
{
|
{
|
||||||
ExtensionEntry *extEntry;
|
ExtensionEntry *extEntry;
|
||||||
|
|
||||||
|
if (!dixRequestPrivate(GEClientPrivateKey, sizeof(GEClientInfoRec)))
|
||||||
|
FatalError("GEExtensionInit: GE private request failed.\n");
|
||||||
|
|
||||||
if(!AddCallback(&ClientStateCallback, GEClientCallback, 0))
|
if(!AddCallback(&ClientStateCallback, GEClientCallback, 0))
|
||||||
{
|
{
|
||||||
FatalError("GEExtensionInit: register client callback failed.\n");
|
FatalError("GEExtensionInit: register client callback failed.\n");
|
||||||
|
|
Loading…
Reference in New Issue