From 3d5519a309f652ddd07bf5d84bd98f5b076d1de2 Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Sat, 18 Dec 2004 15:52:51 +0000 Subject: [PATCH] - PsUnblockThread must be called with dispatcher database lock held. svn path=/trunk/; revision=12181 --- reactos/ntoskrnl/ps/create.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/reactos/ntoskrnl/ps/create.c b/reactos/ntoskrnl/ps/create.c index 86b36b61472..fe74a0a292b 100644 --- a/reactos/ntoskrnl/ps/create.c +++ b/reactos/ntoskrnl/ps/create.c @@ -1,4 +1,4 @@ -/* $Id: create.c,v 1.88 2004/12/12 17:25:52 hbirr Exp $ +/* $Id: create.c,v 1.89 2004/12/18 15:52:51 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -649,6 +649,7 @@ NtCreateThread(OUT PHANDLE ThreadHandle, PTEB TebBase; NTSTATUS Status; PKAPC LdrInitApc; + KIRQL oldIrql; DPRINT("NtCreateThread(ThreadHandle %x, PCONTEXT %x)\n", ThreadHandle,ThreadContext); @@ -735,10 +736,13 @@ NtCreateThread(OUT PHANDLE ThreadHandle, * We must do this manually. Do NOT attempt to set the Thread to Alertable before the call, * doing so is a blatant and erronous hack. */ - Thread->Tcb.ApcState.UserApcPending = TRUE; - Thread->Tcb.Alerted[KernelMode] = TRUE; + Thread->Tcb.ApcState.UserApcPending = TRUE; + Thread->Tcb.Alerted[KernelMode] = TRUE; + oldIrql = KeAcquireDispatcherDatabaseLock (); PsUnblockThread(Thread, NULL); + KeReleaseDispatcherDatabaseLock(oldIrql); + return(STATUS_SUCCESS); } @@ -774,6 +778,7 @@ PsCreateSystemThread(PHANDLE ThreadHandle, { PETHREAD Thread; NTSTATUS Status; + KIRQL oldIrql; DPRINT("PsCreateSystemThread(ThreadHandle %x, ProcessHandle %x)\n", ThreadHandle,ProcessHandle); @@ -801,7 +806,9 @@ PsCreateSystemThread(PHANDLE ThreadHandle, *ClientId=Thread->Cid; } - PsUnblockThread(Thread, NULL); + oldIrql = KeAcquireDispatcherDatabaseLock (); + PsUnblockThread(Thread, NULL); + KeReleaseDispatcherDatabaseLock(oldIrql); return(STATUS_SUCCESS); }