* 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! */
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,
* 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);
+ }
}