- Merge r53134 and r53135 from the GSoC TCP/IP branch

svn path=/trunk/; revision=53143
This commit is contained in:
Cameron Gutman 2011-08-08 21:28:50 +00:00
parent 302ceb19e1
commit 2c6c184457
3 changed files with 27 additions and 13 deletions

View file

@ -12,6 +12,8 @@
#include "rosip.h"
extern NPAGED_LOOKASIDE_LIST TdiBucketLookasideList;
NTSTATUS TCPCheckPeerForAccept(PVOID Context,
PTDI_REQUEST_KERNEL Request)
{
@ -118,7 +120,7 @@ BOOLEAN TCPAbortListenForSocket
{
DereferenceObject(Bucket->AssociatedEndpoint);
RemoveEntryList( &Bucket->Entry );
ExFreePoolWithTag( Bucket, TDI_BUCKET_TAG );
ExFreeToNPagedLookasideList(&TdiBucketLookasideList, Bucket);
Found = TRUE;
break;
}
@ -143,9 +145,7 @@ NTSTATUS TCPAccept ( PTDI_REQUEST Request,
LockObject(Listener, &OldIrql);
Bucket = (PTDI_BUCKET)ExAllocatePoolWithTag(NonPagedPool,
sizeof(*Bucket),
TDI_BUCKET_TAG );
Bucket = ExAllocateFromNPagedLookasideList(&TdiBucketLookasideList);
if (Bucket)
{

View file

@ -30,6 +30,8 @@ static const char * const tcp_state_str[] = {
"TIME_WAIT"
};
extern NPAGED_LOOKASIDE_LIST TdiBucketLookasideList;
static
VOID
BucketCompletionWorker(PVOID Context)
@ -43,7 +45,7 @@ BucketCompletionWorker(PVOID Context)
DereferenceObject(Bucket->AssociatedEndpoint);
ExFreePoolWithTag(Bucket, TDI_BUCKET_TAG);
ExFreeToNPagedLookasideList(&TdiBucketLookasideList, Bucket);
}
VOID

View file

@ -23,6 +23,8 @@ PORT_SET TCPPorts;
#include "rosip.h"
NPAGED_LOOKASIDE_LIST TdiBucketLookasideList;
VOID NTAPI
DisconnectTimeoutDpc(PKDPC Dpc,
PVOID DeferredContext,
@ -85,8 +87,8 @@ VOID ConnectionFree(PVOID Object)
PCONNECTION_ENDPOINT TCPAllocateConnectionEndpoint( PVOID ClientContext )
{
PCONNECTION_ENDPOINT Connection = (PCONNECTION_ENDPOINT)
ExAllocatePoolWithTag(NonPagedPool, sizeof(CONNECTION_ENDPOINT),
CONN_ENDPT_TAG);
ExAllocatePoolWithTag(NonPagedPool, sizeof(CONNECTION_ENDPOINT), CONN_ENDPT_TAG);
if (!Connection)
return Connection;
@ -196,6 +198,14 @@ NTSTATUS TCPStartup(VOID)
{
return Status;
}
ExInitializeNPagedLookasideList(&TdiBucketLookasideList,
NULL,
NULL,
0,
sizeof(TDI_BUCKET),
TDI_BUCKET_TAG,
0);
/* Initialize our IP library */
LibIPInitialize();
@ -218,6 +228,8 @@ NTSTATUS TCPShutdown(VOID)
{
if (!TCPInitialized)
return STATUS_SUCCESS;
ExDeleteNPagedLookasideList(&TdiBucketLookasideList);
LibIPShutdown();
@ -348,7 +360,7 @@ NTSTATUS TCPConnect
{
connaddr.addr = RemoteAddress.Address.IPv4Address;
Bucket = ExAllocatePoolWithTag( NonPagedPool, sizeof(*Bucket), TDI_BUCKET_TAG );
Bucket = ExAllocateFromNPagedLookasideList(&TdiBucketLookasideList);
if (!Bucket)
{
UnlockObject(Connection, OldIrql);
@ -418,13 +430,13 @@ NTSTATUS TCPDisconnect
}
/* We couldn't complete the request now because we need to wait for outstanding I/O */
Bucket = ExAllocatePoolWithTag(NonPagedPool, sizeof(*Bucket), TDI_BUCKET_TAG);
Bucket = ExAllocateFromNPagedLookasideList(&TdiBucketLookasideList);
if (!Bucket)
{
UnlockObject(Connection, OldIrql);
return STATUS_NO_MEMORY;
}
Bucket->Request.RequestNotifyObject = (PVOID)Complete;
Bucket->Request.RequestContext = Context;
@ -485,7 +497,7 @@ NTSTATUS TCPReceiveData
if (Status == STATUS_PENDING)
{
Bucket = ExAllocatePoolWithTag(NonPagedPool, sizeof(*Bucket), TDI_BUCKET_TAG);
Bucket = ExAllocateFromNPagedLookasideList(&TdiBucketLookasideList);
if (!Bucket)
{
TI_DbgPrint(DEBUG_TCP,("[IP, TCPReceiveData] Failed to allocate bucket\n"));
@ -544,7 +556,7 @@ NTSTATUS TCPSendData
if (Status == STATUS_PENDING)
{
/* Freed in TCPSocketState */
Bucket = ExAllocatePoolWithTag( NonPagedPool, sizeof(*Bucket), TDI_BUCKET_TAG );
Bucket = ExAllocateFromNPagedLookasideList(&TdiBucketLookasideList);
if (!Bucket)
{
UnlockObject(Connection, OldIrql);
@ -659,7 +671,7 @@ BOOLEAN TCPRemoveIRP( PCONNECTION_ENDPOINT Endpoint, PIRP Irp )
if( Bucket->Request.RequestContext == Irp )
{
RemoveEntryList( &Bucket->Entry );
ExFreePoolWithTag( Bucket, TDI_BUCKET_TAG );
ExFreeToNPagedLookasideList(&TdiBucketLookasideList, Bucket);
Found = TRUE;
break;
}