From a3f5d30ba61e70b3de8b48754dea32715ba93c40 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 30 Apr 2010 16:10:32 -0700 Subject: Make sure XFixes invisible cursor gets freed on server reset This uses the same hack that dix uses for the rootCursor -- allocate a resource ID for the invisible cursor so that it gets freed at reset time. This also allows us to unconditionally create it during extension initialization; necessary as the privates layout may well be different on subsequent generations. Reviewed-by: Adam Jackson Signed-off-by: Keith Packard --- xfixes/cursor.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'xfixes') diff --git a/xfixes/cursor.c b/xfixes/cursor.c index 1471a58d1..2aba0cec9 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -1054,11 +1054,15 @@ createInvisibleCursor (void) cm.xhot = 0; cm.yhot = 0; - AllocARGBCursor(psrcbits, pmaskbits, - NULL, &cm, - 0, 0, 0, - 0, 0, 0, - &pCursor, serverClient, (XID)0); + if (AllocARGBCursor(psrcbits, pmaskbits, + NULL, &cm, + 0, 0, 0, + 0, 0, 0, + &pCursor, serverClient, (XID)0) != Success) + return NullCursor; + + if (!AddResource(FakeClientID(0), RT_CURSOR, (pointer) pCursor)) + return NullCursor; return pCursor; } @@ -1091,12 +1095,9 @@ XFixesCursorInit (void) CursorWindowType = CreateNewResourceType(CursorFreeWindow, "XFixesCursorWindow"); - if (pInvisibleCursor == NULL) { - pInvisibleCursor = createInvisibleCursor(); - if (pInvisibleCursor == NULL) { - return BadAlloc; - } - } + pInvisibleCursor = createInvisibleCursor(); + if (pInvisibleCursor == NULL) + return BadAlloc; return CursorClientType && CursorHideCountType && CursorWindowType; } -- cgit v1.2.3