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