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