mirror of
https://github.com/reactos/reactos.git
synced 2025-01-01 12:04:51 +00:00
- Revise order of PsInitializeThread to insert the thread to the lists after *all* the fields are initialized and while holding the PiThreadListLock lock acquired.
svn path=/trunk/; revision=10747
This commit is contained in:
parent
51bdcda011
commit
67d68774ab
1 changed files with 9 additions and 11 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: create.c,v 1.79 2004/08/15 16:39:10 chorns Exp $
|
/* $Id: create.c,v 1.80 2004/08/31 06:08:38 navaraf Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -475,11 +475,6 @@ PsInitializeThread(HANDLE ProcessHandle,
|
||||||
|
|
||||||
KeInitializeThread(&Process->Pcb, &Thread->Tcb, First);
|
KeInitializeThread(&Process->Pcb, &Thread->Tcb, First);
|
||||||
Thread->ThreadsProcess = Process;
|
Thread->ThreadsProcess = Process;
|
||||||
/*
|
|
||||||
* FIXME: What lock protects this?
|
|
||||||
*/
|
|
||||||
InsertTailList(&Thread->ThreadsProcess->ThreadListHead,
|
|
||||||
&Thread->Tcb.ProcessThreadListEntry);
|
|
||||||
InitializeListHead(&Thread->TerminationPortList);
|
InitializeListHead(&Thread->TerminationPortList);
|
||||||
KeInitializeSpinLock(&Thread->ActiveTimerListLock);
|
KeInitializeSpinLock(&Thread->ActiveTimerListLock);
|
||||||
InitializeListHead(&Thread->IrpList);
|
InitializeListHead(&Thread->IrpList);
|
||||||
|
@ -490,11 +485,6 @@ PsInitializeThread(HANDLE ProcessHandle,
|
||||||
Thread->Win32Thread = 0;
|
Thread->Win32Thread = 0;
|
||||||
DPRINT("Thread->Cid.UniqueThread %d\n",Thread->Cid.UniqueThread);
|
DPRINT("Thread->Cid.UniqueThread %d\n",Thread->Cid.UniqueThread);
|
||||||
|
|
||||||
*ThreadPtr = Thread;
|
|
||||||
|
|
||||||
KeAcquireSpinLock(&PiThreadListLock, &oldIrql);
|
|
||||||
InsertTailList(&PiThreadListHead, &Thread->Tcb.ThreadListEntry);
|
|
||||||
KeReleaseSpinLock(&PiThreadListLock, oldIrql);
|
|
||||||
|
|
||||||
Thread->Tcb.BasePriority = (CHAR)Thread->ThreadsProcess->Pcb.BasePriority;
|
Thread->Tcb.BasePriority = (CHAR)Thread->ThreadsProcess->Pcb.BasePriority;
|
||||||
Thread->Tcb.Priority = Thread->Tcb.BasePriority;
|
Thread->Tcb.Priority = Thread->Tcb.BasePriority;
|
||||||
|
@ -509,6 +499,14 @@ PsInitializeThread(HANDLE ProcessHandle,
|
||||||
Thread->LpcExitThreadCalled = FALSE;
|
Thread->LpcExitThreadCalled = FALSE;
|
||||||
Thread->LpcReceivedMsgIdValid = FALSE;
|
Thread->LpcReceivedMsgIdValid = FALSE;
|
||||||
|
|
||||||
|
KeAcquireSpinLock(&PiThreadListLock, &oldIrql);
|
||||||
|
InsertTailList(&Thread->ThreadsProcess->ThreadListHead,
|
||||||
|
&Thread->Tcb.ProcessThreadListEntry);
|
||||||
|
InsertTailList(&PiThreadListHead, &Thread->Tcb.ThreadListEntry);
|
||||||
|
KeReleaseSpinLock(&PiThreadListLock, oldIrql);
|
||||||
|
|
||||||
|
*ThreadPtr = Thread;
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue