diff --git a/reactos/drivers/network/afd/afd/listen.c b/reactos/drivers/network/afd/afd/listen.c index 0d7094cb0fa..62fa22b8bf3 100644 --- a/reactos/drivers/network/afd/afd/listen.c +++ b/reactos/drivers/network/afd/afd/listen.c @@ -330,8 +330,10 @@ NTSTATUS AfdAccept( PDEVICE_OBJECT DeviceObject, PIRP Irp, ExFreePool( PendingConnObj ); - if( IsListEmpty( &FCB->PendingConnections ) ) + if( IsListEmpty( &FCB->PendingConnections ) ) { FCB->PollState &= ~AFD_EVENT_ACCEPT; + PollReeval( FCB->DeviceExt, FCB->FileObject ); + } SocketStateUnlock( FCB ); return Irp->IoStatus.Status; diff --git a/reactos/drivers/network/afd/afd/read.c b/reactos/drivers/network/afd/afd/read.c index a95ffb139f3..65183288ca7 100644 --- a/reactos/drivers/network/afd/afd/read.c +++ b/reactos/drivers/network/afd/afd/read.c @@ -98,6 +98,7 @@ static NTSTATUS TryToSatisfyRecvRequestFromBuffer( PAFD_FCB FCB, if( FCB->Recv.BytesUsed == FCB->Recv.Content ) { FCB->Recv.BytesUsed = FCB->Recv.Content = 0; FCB->PollState &= ~AFD_EVENT_RECEIVE; + PollReeval( FCB->DeviceExt, FCB->FileObject ); if( !FCB->ReceiveIrp.InFlightRequest ) { AFD_DbgPrint(MID_TRACE,("Replenishing buffer\n")); @@ -480,12 +481,16 @@ PacketSocketRecvComplete( DatagramRecv->Address = TaCopyTransportAddress( FCB->AddressFrom->RemoteAddress ); - InsertTailList( &FCB->DatagramList, &DatagramRecv->ListEntry ); + if( !DatagramRecv->Address ) Status = STATUS_NO_MEMORY; + } else Status = STATUS_NO_MEMORY; if( !NT_SUCCESS( Status ) ) { + if( DatagramRecv ) ExFreePool( DatagramRecv ); SocketStateUnlock( FCB ); return Status; + } else { + InsertTailList( &FCB->DatagramList, &DatagramRecv->ListEntry ); } /* Satisfy as many requests as we can */ diff --git a/reactos/drivers/network/afd/afd/tdiconn.c b/reactos/drivers/network/afd/afd/tdiconn.c index 392adc8c885..b574020a6aa 100644 --- a/reactos/drivers/network/afd/afd/tdiconn.c +++ b/reactos/drivers/network/afd/afd/tdiconn.c @@ -122,8 +122,10 @@ NTSTATUS TdiBuildNullConnectionInfo ExAllocatePool(NonPagedPool, sizeof(TDI_CONNECTION_INFORMATION) + TdiAddressSize); - if (!ConnInfo) - return STATUS_INSUFFICIENT_RESOURCES; + if (!ConnInfo) { + *ConnectionInfo = NULL; + return STATUS_INSUFFICIENT_RESOURCES; + } Status = TdiBuildNullConnectionInfoInPlace( ConnInfo, Type ); diff --git a/reactos/drivers/network/afd/afd/write.c b/reactos/drivers/network/afd/afd/write.c index 1efc96e6d04..a6bdd134427 100644 --- a/reactos/drivers/network/afd/afd/write.c +++ b/reactos/drivers/network/afd/afd/write.c @@ -140,9 +140,10 @@ static NTSTATUS NTAPI SendComplete SocketCalloutLeave( FCB ); } else { FCB->PollState |= AFD_EVENT_SEND; - PollReeval( FCB->DeviceExt, FCB->FileObject ); } + PollReeval( FCB->DeviceExt, FCB->FileObject ); + if( TotalBytesCopied > 0 ) { UnlockBuffers( SendReq->BufferArray, SendReq->BufferCount, FALSE ); @@ -395,6 +396,8 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, FCB->EventsFired &= ~AFD_EVENT_SEND; FCB->PollState &= ~AFD_EVENT_SEND; + PollReeval( FCB->DeviceExt, FCB->FileObject ); + /* Check that the socket is bound */ if( FCB->State != SOCKET_STATE_BOUND ) return UnlockAndMaybeComplete