dix: free GenericMask allocations when destroying window.

This commit is contained in:
Peter Hutterer 2008-07-08 15:12:45 +09:30
parent 08e2c625f6
commit db86b8839f
2 changed files with 14 additions and 1 deletions

View File

@ -822,6 +822,8 @@ CreateWindow(Window wid, WindowPtr pParent, int x, int y, unsigned w,
static void
DisposeWindowOptional (WindowPtr pWin)
{
GenericMaskPtr gmask = NULL, next = NULL;
if (!pWin->optional)
return;
/*
@ -855,6 +857,17 @@ DisposeWindowOptional (WindowPtr pWin)
xfree(pWin->optional->access.perm);
xfree(pWin->optional->access.deny);
/* Remove generic event mask allocations */
if (pWin->optional->geMasks)
gmask = pWin->optional->geMasks->geClients;
while(gmask)
{
next = gmask->next;
xfree(gmask);
gmask = next;
}
xfree (pWin->optional->geMasks);
xfree (pWin->optional);
pWin->optional = NULL;
}

View File

@ -115,7 +115,7 @@ typedef struct _WindowOpt {
#endif
struct _OtherInputMasks *inputMasks; /* default: NULL */
DevCursorList deviceCursors; /* default: NULL */
struct _GenericClientMasks *geMasks;/* default: NULL */
struct _GenericClientMasks *geMasks; /* default: NULL */
WindowAccessRec access;
} WindowOptRec, *WindowOptPtr;