forget update de.rc
[reactos.git] / reactos / ntoskrnl / lpc / close.c
index b8c681d..1091bfc 100644 (file)
  * REVISIONS
  */
 VOID STDCALL
-NiClosePort (PVOID     ObjectBody, ULONG       HandleCount)
+LpcpClosePort (PVOID   ObjectBody, ULONG       HandleCount)
 {
   PEPORT Port = (PEPORT)ObjectBody;
-  LPC_MESSAGE Message;
+  PORT_MESSAGE Message;
 
   /* FIXME Race conditions here! */
 
@@ -44,8 +44,8 @@ NiClosePort (PVOID    ObjectBody, ULONG       HandleCount)
   if (HandleCount == 1 && Port->State == EPORT_CONNECTED_CLIENT)
     {
       DPRINT("Informing server\n");
-      Message.MessageSize = sizeof(LPC_MESSAGE);
-      Message.DataSize = 0;
+      Message.u1.s1.TotalLength = sizeof(PORT_MESSAGE);
+      Message.u1.s1.DataLength = 0;
       EiReplyOrRequestPort (Port->OtherPort,
                            &Message,
                            LPC_PORT_CLOSED,
@@ -85,11 +85,29 @@ NiClosePort (PVOID  ObjectBody, ULONG       HandleCount)
  * REVISIONS
  */
 VOID STDCALL
-NiDeletePort (PVOID    ObjectBody)
+LpcpDeletePort (PVOID  ObjectBody)
 {
-   //   PEPORT Port = (PEPORT)ObjectBody;
+   PLIST_ENTRY Entry;
+   PQUEUEDMESSAGE      Message;
 
-   //   DPRINT1("Deleting port %x\n", Port);
+   PEPORT Port = (PEPORT)ObjectBody;
+
+   DPRINT("Deleting port %x\n", Port);
+
+   /* Free all waiting messages */
+   while (!IsListEmpty(&Port->QueueListHead))
+     {
+       Entry = RemoveHeadList(&Port->QueueListHead);
+       Message = CONTAINING_RECORD (Entry, QUEUEDMESSAGE, QueueListEntry);
+       ExFreePool(Message);
+     }
+
+   while (!IsListEmpty(&Port->ConnectQueueListHead))
+     {
+       Entry = RemoveHeadList(&Port->ConnectQueueListHead);
+       Message = CONTAINING_RECORD (Entry, QUEUEDMESSAGE, QueueListEntry);
+       ExFreePool(Message);
+     }
 }