- Complete send requests along with the other types when we get an EOF

- Fail the requests with STATUS_CANCELLED

svn path=/trunk/; revision=40436
This commit is contained in:
Cameron Gutman 2009-04-10 02:38:45 +00:00
parent beec711012
commit 6b245eee92

View file

@ -218,27 +218,22 @@ static VOID HandleSignalledConnection( PCONNECTION_ENDPOINT Connection,
if( NewState & SEL_FIN ) { if( NewState & SEL_FIN ) {
PLIST_ENTRY ListsToErase[4]; PLIST_ENTRY ListsToErase[4];
NTSTATUS IrpStatus[4];
UINT i; UINT i;
TI_DbgPrint(DEBUG_TCP, ("EOF From socket\n")); TI_DbgPrint(DEBUG_TCP, ("EOF From socket\n"));
ListsToErase[0] = &Connection->ReceiveRequest; ListsToErase[0] = &Connection->ReceiveRequest;
IrpStatus [0] = STATUS_SUCCESS;
ListsToErase[1] = &Connection->ListenRequest; ListsToErase[1] = &Connection->ListenRequest;
IrpStatus [1] = STATUS_UNSUCCESSFUL;
ListsToErase[2] = &Connection->ConnectRequest; ListsToErase[2] = &Connection->ConnectRequest;
IrpStatus [2] = STATUS_UNSUCCESSFUL; ListsToErase[3] = &Connection->SendRequest;
ListsToErase[3] = 0;
IrpStatus [3] = 0;
for( i = 0; ListsToErase[i]; i++ ) { for( i = 0; i < 4; i++ ) {
while( !IsListEmpty( ListsToErase[i] ) ) { while( !IsListEmpty( ListsToErase[i] ) ) {
Entry = RemoveHeadList( ListsToErase[i] ); Entry = RemoveHeadList( ListsToErase[i] );
Bucket = CONTAINING_RECORD( Entry, TDI_BUCKET, Entry ); Bucket = CONTAINING_RECORD( Entry, TDI_BUCKET, Entry );
Complete = Bucket->Request.RequestNotifyObject; Complete = Bucket->Request.RequestNotifyObject;
Complete( Bucket->Request.RequestContext, IrpStatus[i], 0 ); Complete( Bucket->Request.RequestContext, STATUS_CANCELLED, 0 );
exFreePool( Bucket ); exFreePool( Bucket );
} }
} }
} }