Xi: free barrier code at reset time

==29423== 16 bytes in 1 blocks are definitely lost in loss record 73 of 328
==29423==    at 0x4A06B6F: calloc (vg_replace_malloc.c:593)
==29423==    by 0x5987C0: XIBarrierInit (xibarriers.c:908)
==29423==    by 0x58F370: XInputExtensionInit (extinit.c:1300)
==29423==    by 0x4F33C3: InitExtensions (miinitext.c:337)
==29423==    by 0x4997DB: main (main.c:208)

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Peter Hutterer 2013-04-24 14:59:11 +10:00
parent 042c6d861f
commit 6993f8b459
3 changed files with 16 additions and 2 deletions

View File

@ -1171,6 +1171,8 @@ IResetProc(ExtensionEntry * unused)
free(xi_all_devices.name); free(xi_all_devices.name);
free(xi_all_master_devices.name); free(xi_all_master_devices.name);
XIBarrierReset();
} }
/*********************************************************************** /***********************************************************************

View File

@ -917,3 +917,15 @@ XIBarrierInit(void)
return PointerBarrierType; return PointerBarrierType;
} }
void
XIBarrierReset(void)
{
int i;
for (i = 0; i < screenInfo.numScreens; i++) {
ScreenPtr pScreen = screenInfo.screens[i];
BarrierScreenPtr cs = GetBarrierScreen(pScreen);
free(cs);
SetBarrierScreen(pScreen, NULL);
}
}

View File

@ -36,8 +36,8 @@ int
XIDestroyPointerBarrier(ClientPtr client, XIDestroyPointerBarrier(ClientPtr client,
xXFixesDestroyPointerBarrierReq * stuff); xXFixesDestroyPointerBarrierReq * stuff);
Bool Bool XIBarrierInit(void);
XIBarrierInit(void); void XIBarrierReset(void);
int SProcXIBarrierReleasePointer(ClientPtr client); int SProcXIBarrierReleasePointer(ClientPtr client);
int ProcXIBarrierReleasePointer(ClientPtr client); int ProcXIBarrierReleasePointer(ClientPtr client);