- Fix a bug in LPC creation (missing one handle) and LPC closing (was not properly...
authorAlex Ionescu <aionescu@gmail.com>
Tue, 25 Jul 2006 20:21:24 +0000 (20:21 +0000)
committerAlex Ionescu <aionescu@gmail.com>
Tue, 25 Jul 2006 20:21:24 +0000 (20:21 +0000)
- As a result, processes can die again, and also be killed by Task Manager.
- And finally, "Exit" in cmd.exe as well as pressing the "x" button work.

svn path=/trunk/; revision=23292

reactos/ntoskrnl/KrnlFun.c
reactos/ntoskrnl/lpc/close.c
reactos/ntoskrnl/lpc/connect.c

index 0b0b6b9..3d3232e 100644 (file)
@@ -24,7 +24,6 @@
 //  - Add support for Fast Dispatch I/O.\r
 //\r
 // Ps:\r
-//  - Figure out why processes don't die.\r
 //  - Generate process cookie for user-more thread.\r
 //\r
 // Ob:\r
 //  - Add Directory Lock.\r
 //  - Use Object Type Mutex/Lock.\r
 //  - Implement handle database if anyone needs it.\r
-//  - Figure out why cmd.exe won't close anymore.\r
 //\r
 // Ex:\r
 //  - Use pushlocks for handle implementation.\r
-//  - Figure out why cmd.exe won't close anymore.\r
 //\r
 ///////////////////////////////////////////////////////////////////////////////\r
 \r
index b74f501..cf569dc 100644 (file)
@@ -57,13 +57,11 @@ LpcpClosePort (IN PEPROCESS Process OPTIONAL,
 
   /* FIXME Race conditions here! */
 
-  DPRINT("NiClosePort 0x%p OtherPort 0x%p State %d\n", Port, Port->OtherPort, Port->State);
-
   /*
    * If the client has just closed its handle then tell the server what
    * happened and disconnect this port.
    */
-  if (HandleCount == 1 && Port->State == EPORT_CONNECTED_CLIENT)
+  if (!(HandleCount)&& (Port->State == EPORT_CONNECTED_CLIENT))
     {
       DPRINT("Informing server\n");
       Message.u1.s1.TotalLength = sizeof(PORT_MESSAGE);
@@ -85,7 +83,7 @@ LpcpClosePort (IN PEPROCESS Process OPTIONAL,
    * If the server has closed all of its handles then disconnect the port,
    * don't actually notify the client until it attempts an operation.
    */
-  if (HandleCount == 1 && Port->State == EPORT_CONNECTED_SERVER)
+  if (!(HandleCount)&& (Port->State == EPORT_CONNECTED_SERVER))
     {
         DPRINT("Cleaning up server\n");
        Port->OtherPort->OtherPort = NULL;
index 3b5c9c3..6aa3690 100644 (file)
@@ -552,8 +552,8 @@ NtConnectPort (PHANDLE                              UnsafeConnectedPortHandle,
   Status = ObInsertObject(ConnectedPort,
                          NULL,
                          PORT_ALL_ACCESS,
-                         0,
-                         NULL,
+                         1,
+                         (PVOID*)&ConnectedPort,
                          &ConnectedPortHandle);
   if (!NT_SUCCESS(Status))
     {