mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 19:26:32 +00:00
- Prevent kernel bug check in win32k when calling a hook proc when thread is in cleanup.
- This is not a hack and not a fix. Please retest related bug report applications. Tested Firefox 3.5 and the new putty. Need new debug print outs. ATM Ff 3.5 send out WH_JOURNALRECORD hook calls when the thread is in cleanup. Look like this: Thread is in cleanup and trying to call hook 0 - Reference bug 4298. svn path=/trunk/; revision=43259
This commit is contained in:
@@ -16,8 +16,7 @@
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id$
|
||||
*
|
||||
/*
|
||||
* Entry Point for win32k.sys
|
||||
*/
|
||||
|
||||
@@ -285,6 +284,7 @@ Win32kThreadCallback(struct _ETHREAD *Thread,
|
||||
DPRINT("Destroying W32 thread TID:%d at IRQ level: %lu\n", Thread->Cid.UniqueThread, KeGetCurrentIrql());
|
||||
|
||||
Win32Thread->IsExiting = TRUE;
|
||||
Win32Thread->TIF_flags |= TIF_INCLEANUP;
|
||||
HOOK_DestroyThreadHooks(Thread);
|
||||
UnregisterThreadHotKeys(Thread);
|
||||
/* what if this co_ func crash in umode? what will clean us up then? */
|
||||
|
||||
@@ -326,6 +326,14 @@ co_IntCallHookProc(INT HookId,
|
||||
UNICODE_STRING ClassName;
|
||||
PANSI_STRING asWindowName;
|
||||
PANSI_STRING asClassName;
|
||||
PTHREADINFO pti;
|
||||
|
||||
pti = PsGetCurrentThreadWin32Thread();
|
||||
if (pti->TIF_flags & TIF_INCLEANUP)
|
||||
{
|
||||
DPRINT1("Thread is in cleanup and trying to call hook %d\n", Code);
|
||||
return 0;
|
||||
}
|
||||
|
||||
ArgumentLength = sizeof(HOOKPROC_CALLBACK_ARGUMENTS) - sizeof(WCHAR)
|
||||
+ ModuleName->Length;
|
||||
|
||||
@@ -425,6 +425,7 @@ static LRESULT co_UserFreeWindow(PWINDOW_OBJECT Window,
|
||||
co_IntSendMessage(Window->hSelf, WM_NCDESTROY, 0, 0);
|
||||
}
|
||||
MsqRemoveTimersWindow(ThreadData->MessageQueue, Window->hSelf);
|
||||
HOOK_DestroyThreadHooks(ThreadData->pEThread); // This is needed here too!
|
||||
|
||||
/* flush the message queue */
|
||||
MsqRemoveWindowMessagesFromQueue(Window);
|
||||
|
||||
Reference in New Issue
Block a user