- Do not call UserSetCursor in MsqCleanupMessageQueue because it uses current thread queue instead of queue in cleanup (they can be different).
See issue #6530 for more details.

svn path=/trunk/; revision=54051
This commit is contained in:
Rafal Harabien 2011-10-07 20:23:24 +00:00
parent 71f55db0d5
commit dfb39c9849
2 changed files with 12 additions and 4 deletions

View file

@ -399,8 +399,6 @@ Win32kThreadCallback(struct _ETHREAD *Thread,
/* Do now some process cleanup that requires a valid win32 thread */
if(ptiCurrent->ppi->cThreads == 0)
{
UserSetCursor(NULL, TRUE);
/* Check if we have registered the user api hook */
if(ptiCurrent->ppi == ppiUahServer)
{

View file

@ -2094,9 +2094,19 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
{
PCURICON_OBJECT pCursor = MessageQueue->CursorObject;
/* Change to another cursor if we going to dereference current one */
/* Change to another cursor if we going to dereference current one
Note: we can't use UserSetCursor because it uses current thread
message queue instead of queue given for cleanup */
if (IntGetSysCursorInfo()->CurrentCursorObject == pCursor)
UserSetCursor(NULL, TRUE);
{
HDC hdcScreen;
/* Get the screen DC */
hdcScreen = IntGetScreenDC();
if (hdcScreen)
GreMovePointer(hdcScreen, -1, -1);
IntGetSysCursorInfo()->CurrentCursorObject = NULL;
}
UserDereferenceObject(pCursor);
}