ClientCcb->MaxDataLength = Fcb->OutboundQuota;
ExInitializeFastMutex(&ClientCcb->DataListLock);
KeInitializeEvent(&ClientCcb->ConnectEvent, SynchronizationEvent, FALSE);
- KeInitializeEvent(&ClientCcb->ReadEvent, SynchronizationEvent, FALSE);
- KeInitializeEvent(&ClientCcb->WriteEvent, SynchronizationEvent, FALSE);
+ KeInitializeEvent(&ClientCcb->ReadEvent, NotificationEvent, FALSE);
+ KeInitializeEvent(&ClientCcb->WriteEvent, NotificationEvent, FALSE);
/*
if (ClientCcb->Data)
{
ExFreePool(ClientCcb->Data);
- ClientCcb->Data = NULL;
}
+
+ ExFreePool(ClientCcb);
KeUnlockMutex(&Fcb->CcbListLock);
Irp->IoStatus.Status = STATUS_OBJECT_PATH_NOT_FOUND;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
else if (IsListEmpty(&Fcb->ServerCcbListHead))
{
DPRINT("No server fcb found!\n");
+
+ if (ClientCcb->Data)
+ {
+ ExFreePool(ClientCcb->Data);
+ }
+
+ ExFreePool(ClientCcb);
+
KeUnlockMutex(&Fcb->CcbListLock);
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
DPRINT("CCB: %p\n", Ccb);
KeInitializeEvent(&Ccb->ConnectEvent, SynchronizationEvent, FALSE);
- KeInitializeEvent(&Ccb->ReadEvent, SynchronizationEvent, FALSE);
- KeInitializeEvent(&Ccb->WriteEvent, SynchronizationEvent, FALSE);
+ KeInitializeEvent(&Ccb->ReadEvent, NotificationEvent, FALSE);
+ KeInitializeEvent(&Ccb->WriteEvent, NotificationEvent, FALSE);
KeLockMutex(&Fcb->CcbListLock);
InsertTailList(&Fcb->ServerCcbListHead, &Ccb->CcbListEntry);
ExAcquireFastMutex(&OtherSide->DataListLock);
ExAcquireFastMutex(&Ccb->DataListLock);
}
- //OtherSide->PipeState = FILE_PIPE_DISCONNECTED_STATE;
OtherSide->OtherSide = NULL;
/*
* Signaling the write event. If is possible that an other
}
/* Disconnect the pipes */
- if (Ccb->OtherSide) Ccb->OtherSide->OtherSide = NULL;
- if (Ccb) Ccb->OtherSide = NULL;
+ if (Ccb->OtherSide)
+ {
+ Ccb->OtherSide->OtherSide = NULL;
+ Ccb->OtherSide = NULL;
+ }
ASSERT(Ccb->PipeState == FILE_PIPE_CLOSING_STATE);