- Revise order of PsInitializeThread to insert the thread to the lists after *all...
authorFilip Navara <filip.navara@gmail.com>
Tue, 31 Aug 2004 06:08:38 +0000 (06:08 +0000)
committerFilip Navara <filip.navara@gmail.com>
Tue, 31 Aug 2004 06:08:38 +0000 (06:08 +0000)
svn path=/trunk/; revision=10747

reactos/ntoskrnl/ps/create.c

index ae767db..7d64a11 100644 (file)
@@ -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
  * PROJECT:                ReactOS kernel
@@ -475,11 +475,6 @@ PsInitializeThread(HANDLE ProcessHandle,
    
    KeInitializeThread(&Process->Pcb, &Thread->Tcb, First);
    Thread->ThreadsProcess = Process;
-   /*
-    * FIXME: What lock protects this?
-    */
-   InsertTailList(&Thread->ThreadsProcess->ThreadListHead, 
-                 &Thread->Tcb.ProcessThreadListEntry);
    InitializeListHead(&Thread->TerminationPortList);
    KeInitializeSpinLock(&Thread->ActiveTimerListLock);
    InitializeListHead(&Thread->IrpList);
@@ -490,11 +485,6 @@ PsInitializeThread(HANDLE ProcessHandle,
    Thread->Win32Thread = 0;
    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.Priority = Thread->Tcb.BasePriority;
@@ -509,6 +499,14 @@ PsInitializeThread(HANDLE ProcessHandle,
    Thread->LpcExitThreadCalled = 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);
 }