update for HEAD-2003091401
[reactos.git] / ntoskrnl / lpc / reply.c
index 45af312..dd4701b 100644 (file)
@@ -37,7 +37,6 @@
  * RETURN VALUE
  *
  * REVISIONS
- *
  */
 NTSTATUS STDCALL
 EiReplyOrRequestPort (IN       PEPORT          Port, 
@@ -50,7 +49,7 @@ EiReplyOrRequestPort (IN      PEPORT          Port,
    
    if (Port == NULL)
      {
-       KeBugCheck(0);
+       KEBUGCHECK(0);
      }
 
    MessageReply = ExAllocatePoolWithTag(NonPagedPool, sizeof(QUEUEDMESSAGE),
@@ -62,8 +61,8 @@ EiReplyOrRequestPort (IN      PEPORT          Port,
        memcpy(&MessageReply->Message, LpcReply, LpcReply->MessageSize);
      }
    
-   MessageReply->Message.Cid.UniqueProcess = PsGetCurrentProcessId();
-   MessageReply->Message.Cid.UniqueThread = PsGetCurrentThreadId();
+   MessageReply->Message.ClientId.UniqueProcess = PsGetCurrentProcessId();
+   MessageReply->Message.ClientId.UniqueThread = PsGetCurrentThreadId();
    MessageReply->Message.MessageType = MessageType;
    MessageReply->Message.MessageId = InterlockedIncrement((LONG *)&EiNextLpcMessageId);
    
@@ -85,7 +84,6 @@ EiReplyOrRequestPort (IN      PEPORT          Port,
  * RETURN VALUE
  *
  * REVISIONS
- *
  */
 NTSTATUS STDCALL
 NtReplyPort (IN        HANDLE          PortHandle,
@@ -138,7 +136,6 @@ NtReplyPort (IN     HANDLE          PortHandle,
  * RETURN VALUE
  *
  * REVISIONS
- *
  */
 NTSTATUS STDCALL
 NtReplyWaitReceivePortEx(IN  HANDLE            PortHandle,
@@ -220,7 +217,10 @@ NtReplyWaitReceivePortEx(IN  HANDLE                PortHandle,
    
    if (!NT_SUCCESS(Status))
      {
-       DPRINT1("NtReplyWaitReceivePortEx() = %x\n", Status);
+       if (STATUS_THREAD_IS_TERMINATING != Status)
+        {
+          DPRINT1("NtReplyWaitReceivePortEx() = %x\n", Status);
+        }
        ObDereferenceObject(Port);
        return(Status);
      }
@@ -230,7 +230,8 @@ NtReplyWaitReceivePortEx(IN  HANDLE         PortHandle,
     */
    KeAcquireSpinLock(&Port->Lock, &oldIrql);
    Request = EiDequeueMessagePort(Port);
-   
+   KeReleaseSpinLock(&Port->Lock, oldIrql);
+
    if (Request->Message.MessageType == LPC_CONNECTION_REQUEST)
      {
        LPC_MESSAGE Header;
@@ -241,7 +242,7 @@ NtReplyWaitReceivePortEx(IN  HANDLE         PortHandle,
        Header.DataSize = CRequest->ConnectDataLength;
        Header.MessageSize = Header.DataSize + sizeof(LPC_MESSAGE);
        Status = MmCopyToCaller(LpcMessage, &Header, sizeof(LPC_MESSAGE));
-       if (!NT_SUCCESS(Status))
+       if (NT_SUCCESS(Status))
         {
           Status = MmCopyToCaller((PVOID)(LpcMessage + 1),
                                   CRequest->ConnectData,
@@ -260,6 +261,7 @@ NtReplyWaitReceivePortEx(IN  HANDLE         PortHandle,
        * undo what we did and return.
        * FIXME: Also increment semaphore.
        */
+       KeAcquireSpinLock(&Port->Lock, &oldIrql);
        EiEnqueueMessageAtHeadPort(Port, Request);
        KeReleaseSpinLock(&Port->Lock, oldIrql);
        ObDereferenceObject(Port);
@@ -267,12 +269,12 @@ NtReplyWaitReceivePortEx(IN  HANDLE               PortHandle,
      }
    if (Request->Message.MessageType == LPC_CONNECTION_REQUEST)
      {
+       KeAcquireSpinLock(&Port->Lock, &oldIrql);
        EiEnqueueConnectMessagePort(Port, Request);
        KeReleaseSpinLock(&Port->Lock, oldIrql);
      }
    else
      {
-       KeReleaseSpinLock(&Port->Lock, oldIrql);
        ExFreePool(Request);
      }
    
@@ -300,7 +302,6 @@ NtReplyWaitReceivePortEx(IN  HANDLE         PortHandle,
  * RETURN VALUE
  *
  * REVISIONS
- *
  */
 NTSTATUS STDCALL
 NtReplyWaitReceivePort (IN  HANDLE             PortHandle,
@@ -325,13 +326,13 @@ NtReplyWaitReceivePort (IN  HANDLE                PortHandle,
  * RETURN VALUE
  *
  * REVISIONS
- *
  */
 NTSTATUS STDCALL
 NtReplyWaitReplyPort (HANDLE           PortHandle,
                      PLPC_MESSAGE      ReplyMessage)
 {
    UNIMPLEMENTED;
+   return(STATUS_NOT_IMPLEMENTED);
 }