Commit in reactos/ntoskrnl/ke on ros-branch-0_2_4
kthread.c+9-11.51 -> 1.51.2.1
process.c+8-71.25 -> 1.25.2.1
+17-8
2 modified files
- Establish the pde for the thread structure within the process
  before a switch to the process occurs.

reactos/ntoskrnl/ke
kthread.c 1.51 -> 1.51.2.1
diff -u -r1.51 -r1.51.2.1
--- kthread.c	21 Aug 2004 21:09:39 -0000	1.51
+++ kthread.c	27 Aug 2004 10:38:17 -0000	1.51.2.1
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/* $Id: kthread.c,v 1.51 2004/08/21 21:09:39 tamlin Exp $
+/* $Id: kthread.c,v 1.51.2.1 2004/08/27 10:38:17 hbirr Exp $
  *
  * FILE:            ntoskrnl/ke/kthread.c
  * PURPOSE:         Microkernel thread support
@@ -188,8 +188,16 @@
       Thread->StackLimit = (ULONG)&init_stack;
       Thread->KernelStack = (PVOID)&init_stack_top;
     }
+
+  /* 
+   * Establish the pde's for the new stack and the thread structure within the 
+   * address space of the new process. They are accessed while taskswitching or
+   * while handling page faults. At this point it isn't possible to call the 
+   * page fault handler for the missing pde's. 
+   */
   
   MmUpdatePageDir((PEPROCESS)Process, (PVOID)Thread->StackLimit, MM_STACK_SIZE);
+  MmUpdatePageDir((PEPROCESS)Process, (PVOID)Thread, sizeof(ETHREAD));
 
   /* 
    * The Native API function will initialize the TEB field later 

reactos/ntoskrnl/ke
process.c 1.25 -> 1.25.2.1
diff -u -r1.25 -r1.25.2.1
--- process.c	21 Aug 2004 21:19:06 -0000	1.25
+++ process.c	27 Aug 2004 10:38:17 -0000	1.25.2.1
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/* $Id: process.c,v 1.25 2004/08/21 21:19:06 tamlin Exp $
+/* $Id: process.c,v 1.25.2.1 2004/08/27 10:38:17 hbirr Exp $
  *
  * PROJECT:         ReactOS kernel
  * FILE:            ntoskrnl/ke/process.c
@@ -55,16 +55,17 @@
 	KEBUGCHECK(INVALID_PROCESS_ATTACH_ATTEMPT);
      }
    
-   /* The stack of the current process may be located in a page which is
-      not present in the page directory of the process we're attaching to.
-      That would lead to a page fault when this function returns. However,
-      since the processor can't call the page fault handler 'cause it can't
-      push EIP on the stack, this will show up as a stack fault which will
-      crash the entire system.
+   /* The stack and the thread structure of the current process may be 
+      located in a page which is not present in the page directory of 
+      the process we're attaching to. That would lead to a page fault 
+      when this function returns. However, since the processor can't 
+      call the page fault handler 'cause it can't push EIP on the stack, 
+      this will show up as a stack fault which will crash the entire system.
       To prevent this, make sure the page directory of the process we're
       attaching to is up-to-date. */
 
    MmUpdatePageDir(Process, (PVOID)CurrentThread->Tcb.StackLimit, MM_STACK_SIZE);
+   MmUpdatePageDir(Process, (PVOID)CurrentThread, sizeof(ETHREAD));
 
    KeRaiseIrql(DISPATCH_LEVEL, &oldlvl);
 
CVSspam 0.2.8