Never call TdiCloseDevice when warming up a socket

svn path=/trunk/; revision=29174
This commit is contained in:
Hervé Poussineau 2007-09-24 08:39:23 +00:00
parent e6ed27d2e5
commit d0f1fadb7b
2 changed files with 19 additions and 32 deletions

View file

@ -14,7 +14,7 @@
#include "debug.h" #include "debug.h"
NTSTATUS WarmSocketForBind( PAFD_FCB FCB ) { NTSTATUS WarmSocketForBind( PAFD_FCB FCB ) {
NTSTATUS Status = STATUS_UNSUCCESSFUL; NTSTATUS Status;
AFD_DbgPrint(MID_TRACE,("Called (AF %d)\n", AFD_DbgPrint(MID_TRACE,("Called (AF %d)\n",
FCB->LocalAddress->Address[0].AddressType)); FCB->LocalAddress->Address[0].AddressType));
@ -23,20 +23,15 @@ NTSTATUS WarmSocketForBind( PAFD_FCB FCB ) {
AFD_DbgPrint(MID_TRACE,("Null Device\n")); AFD_DbgPrint(MID_TRACE,("Null Device\n"));
return STATUS_NO_SUCH_DEVICE; return STATUS_NO_SUCH_DEVICE;
} }
if( !FCB->LocalAddress ) {
AFD_DbgPrint(MID_TRACE,("No local address\n"));
return STATUS_UNSUCCESSFUL;
}
if( FCB->LocalAddress ) { Status = TdiOpenAddressFile(&FCB->TdiDeviceName,
Status = TdiOpenAddressFile
( &FCB->TdiDeviceName,
FCB->LocalAddress, FCB->LocalAddress,
&FCB->AddressFile.Handle, &FCB->AddressFile.Handle,
&FCB->AddressFile.Object ); &FCB->AddressFile.Object );
}
if( !NT_SUCCESS(Status) ) {
TdiCloseDevice( &FCB->AddressFile.Handle,
FCB->AddressFile.Object );
RtlZeroMemory( &FCB->AddressFile, sizeof( FCB->AddressFile ) );
}
AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status));

View file

@ -20,23 +20,15 @@ NTSTATUS WarmSocketForConnection( PAFD_FCB FCB ) {
return STATUS_NO_SUCH_DEVICE; return STATUS_NO_SUCH_DEVICE;
} }
Status = TdiOpenConnectionEndpointFile Status = TdiOpenConnectionEndpointFile(&FCB->TdiDeviceName,
( &FCB->TdiDeviceName,
&FCB->Connection.Handle, &FCB->Connection.Handle,
&FCB->Connection.Object ); &FCB->Connection.Object );
if( NT_SUCCESS(Status) ) { if( NT_SUCCESS(Status) ) {
Status = TdiAssociateAddressFile Status = TdiAssociateAddressFile( FCB->AddressFile.Handle,
( FCB->AddressFile.Handle,
FCB->Connection.Object ); FCB->Connection.Object );
} }
if( !NT_SUCCESS(Status) ) {
TdiCloseDevice( &FCB->Connection.Handle,
FCB->Connection.Object );
RtlZeroMemory( &FCB->Connection, sizeof(FCB->Connection) );
}
return Status; return Status;
} }