[AFD] Introduce and use pool tags. Thanks go to Arty for assisting me with this....
[reactos.git] / drivers / network / afd / afd / connect.c
index 86ce48f..1562f5f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id$
+/*
  * COPYRIGHT:        See COPYING in the top level directory
  * PROJECT:          ReactOS kernel
  * FILE:             drivers/net/afd/afd/connect.c
@@ -7,6 +7,7 @@
  * UPDATE HISTORY:
  * 20040708 Created
  */
+
 #include "afd.h"
 
 NTSTATUS
@@ -18,6 +19,8 @@ AfdGetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PAFD_FCB FCB = FileObject->FsContext;
     UINT BufferSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
 
+    UNREFERENCED_PARAMETER(DeviceObject);
+
     if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
 
     if (FCB->ConnectOptionsSize == 0)
@@ -47,6 +50,8 @@ AfdSetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PVOID ConnectOptions = LockRequest(Irp, IrpSp, FALSE, NULL);
     UINT ConnectOptionsSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
 
+    UNREFERENCED_PARAMETER(DeviceObject);
+
     if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
 
     if (!ConnectOptions)
@@ -54,13 +59,16 @@ AfdSetConnectOptions(PDEVICE_OBJECT DeviceObject, PIRP Irp,
 
     if (FCB->ConnectOptions)
     {
-        ExFreePool(FCB->ConnectOptions);
+        ExFreePoolWithTag(FCB->ConnectOptions, TAG_AFD_CONNECT_OPTIONS);
         FCB->ConnectOptions = NULL;
         FCB->ConnectOptionsSize = 0;
         FCB->FilledConnectOptions = 0;
     }
 
-    FCB->ConnectOptions = ExAllocatePool(PagedPool, ConnectOptionsSize);
+    FCB->ConnectOptions = ExAllocatePoolWithTag(PagedPool,
+                                                ConnectOptionsSize,
+                                                TAG_AFD_CONNECT_OPTIONS);
+
     if (!FCB->ConnectOptions)
         return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
 
@@ -83,6 +91,8 @@ AfdSetConnectOptionsSize(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PUINT ConnectOptionsSize = LockRequest(Irp, IrpSp, FALSE, NULL);
     UINT BufferSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
 
+    UNREFERENCED_PARAMETER(DeviceObject);
+
     if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
 
     if (!ConnectOptionsSize)
@@ -96,12 +106,15 @@ AfdSetConnectOptionsSize(PDEVICE_OBJECT DeviceObject, PIRP Irp,
 
     if (FCB->ConnectOptions)
     {
-        ExFreePool(FCB->ConnectOptions);
+        ExFreePoolWithTag(FCB->ConnectOptions, TAG_AFD_CONNECT_OPTIONS);
         FCB->ConnectOptionsSize = 0;
         FCB->FilledConnectOptions = 0;
     }
 
-    FCB->ConnectOptions = ExAllocatePool(PagedPool, *ConnectOptionsSize);
+    FCB->ConnectOptions = ExAllocatePoolWithTag(PagedPool,
+                                                *ConnectOptionsSize,
+                                                TAG_AFD_CONNECT_OPTIONS);
+
     if (!FCB->ConnectOptions) return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
 
     FCB->ConnectOptionsSize = *ConnectOptionsSize;
@@ -118,6 +131,8 @@ AfdGetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PAFD_FCB FCB = FileObject->FsContext;
     UINT BufferSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
 
+    UNREFERENCED_PARAMETER(DeviceObject);
+
     if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
 
     if (FCB->ConnectDataSize == 0)
@@ -147,6 +162,8 @@ AfdSetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PVOID ConnectData = LockRequest(Irp, IrpSp, FALSE, NULL);
     UINT ConnectDataSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
 
+    UNREFERENCED_PARAMETER(DeviceObject);
+
     if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
 
     if (!ConnectData)
@@ -154,13 +171,16 @@ AfdSetConnectData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
 
     if (FCB->ConnectData)
     {
-        ExFreePool(FCB->ConnectData);
+        ExFreePoolWithTag(FCB->ConnectData, TAG_AFD_CONNECT_DATA);
         FCB->ConnectData = NULL;
         FCB->ConnectDataSize = 0;
         FCB->FilledConnectData = 0;
     }
 
-    FCB->ConnectData = ExAllocatePool(PagedPool, ConnectDataSize);
+    FCB->ConnectData = ExAllocatePoolWithTag(PagedPool,
+                                             ConnectDataSize,
+                                             TAG_AFD_CONNECT_DATA);
+
     if (!FCB->ConnectData) return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
 
     RtlCopyMemory(FCB->ConnectData,
@@ -182,6 +202,8 @@ AfdSetConnectDataSize(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PUINT ConnectDataSize = LockRequest(Irp, IrpSp, FALSE, NULL);
     UINT BufferSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
 
+    UNREFERENCED_PARAMETER(DeviceObject);
+
     if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
 
     if (!ConnectDataSize)
@@ -195,12 +217,15 @@ AfdSetConnectDataSize(PDEVICE_OBJECT DeviceObject, PIRP Irp,
 
     if (FCB->ConnectData)
     {
-        ExFreePool(FCB->ConnectData);
+        ExFreePoolWithTag(FCB->ConnectData, TAG_AFD_CONNECT_DATA);
         FCB->ConnectDataSize = 0;
         FCB->FilledConnectData = 0;
     }
 
-    FCB->ConnectData = ExAllocatePool(PagedPool, *ConnectDataSize);
+    FCB->ConnectData = ExAllocatePoolWithTag(PagedPool,
+                                             *ConnectDataSize,
+                                             TAG_AFD_CONNECT_DATA);
+
     if (!FCB->ConnectData) return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
 
     FCB->ConnectDataSize = *ConnectDataSize;
@@ -256,13 +281,19 @@ MakeSocketIntoConnection(PAFD_FCB FCB) {
     /* Allocate the receive area and start receiving */
     if (!FCB->Recv.Window)
     {
-        FCB->Recv.Window = ExAllocatePool( PagedPool, FCB->Recv.Size );
+        FCB->Recv.Window = ExAllocatePoolWithTag(PagedPool,
+                                                 FCB->Recv.Size,
+                                                 TAG_AFD_DATA_BUFFER);
+
         if( !FCB->Recv.Window ) return STATUS_NO_MEMORY;
     }
 
     if (!FCB->Send.Window)
     {
-        FCB->Send.Window = ExAllocatePool( PagedPool, FCB->Send.Size );
+        FCB->Send.Window = ExAllocatePoolWithTag(PagedPool,
+                                                 FCB->Send.Size,
+                                                 TAG_AFD_DATA_BUFFER);
+
         if( !FCB->Send.Window ) return STATUS_NO_MEMORY;
     }
 
@@ -273,7 +304,6 @@ MakeSocketIntoConnection(PAFD_FCB FCB) {
                          TDI_RECEIVE_NORMAL,
                          FCB->Recv.Window,
                          FCB->Recv.Size,
-                         &FCB->ReceiveIrp.Iosb,
                          ReceiveComplete,
                          FCB );
 
@@ -287,6 +317,7 @@ MakeSocketIntoConnection(PAFD_FCB FCB) {
    return Status;
 }
 
+static IO_COMPLETION_ROUTINE StreamSocketConnectComplete;
 static
 NTSTATUS
 NTAPI
@@ -297,7 +328,7 @@ StreamSocketConnectComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PLIST_ENTRY NextIrpEntry;
     PIRP NextIrp;
 
-    AFD_DbgPrint(MID_TRACE,("Called: FCB %x, FO %x\n",
+    AFD_DbgPrint(MID_TRACE,("Called: FCB %p, FO %p\n",
                             Context, FCB->FileObject));
 
     /* I was wrong about this before as we can have pending writes to a not
@@ -338,7 +369,7 @@ StreamSocketConnectComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_CONNECT] ) ) {
         NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_CONNECT]);
         NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry);
-        AFD_DbgPrint(MID_TRACE,("Completing connect %x\n", NextIrp));
+        AFD_DbgPrint(MID_TRACE,("Completing connect %p\n", NextIrp));
         NextIrp->IoStatus.Status = Status;
         NextIrp->IoStatus.Information = NT_SUCCESS(Status) ? ((ULONG_PTR)FCB->Connection.Handle) : 0;
         if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) );
@@ -374,7 +405,7 @@ StreamSocketConnectComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp,
             NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]);
             NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP,
                                         Tail.Overlay.ListEntry);
-            AFD_DbgPrint(MID_TRACE,("Launching send request %x\n", NextIrp));
+            AFD_DbgPrint(MID_TRACE,("Launching send request %p\n", NextIrp));
             Status = AfdConnectedSocketWriteData
                 ( DeviceObject,
                   NextIrp,
@@ -403,7 +434,9 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PFILE_OBJECT FileObject = IrpSp->FileObject;
     PAFD_FCB FCB = FileObject->FsContext;
     PAFD_CONNECT_INFO ConnectReq;
-    AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
+    AFD_DbgPrint(MID_TRACE,("Called on %p\n", FCB));
+
+    UNREFERENCED_PARAMETER(DeviceObject);
 
     if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
     if( !(ConnectReq = LockRequest( Irp, IrpSp, FALSE, NULL )) )
@@ -419,7 +452,11 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
 
    if( FCB->Flags & AFD_ENDPOINT_CONNECTIONLESS )
    {
-        if( FCB->RemoteAddress ) ExFreePool( FCB->RemoteAddress );
+        if (FCB->RemoteAddress)
+        {
+            ExFreePoolWithTag(FCB->RemoteAddress, TAG_AFD_TRANSPORT_ADDRESS);
+        }
+
         FCB->RemoteAddress =
             TaCopyTransportAddress( &ConnectReq->RemoteAddress );
 
@@ -440,7 +477,11 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
         return LeaveIrpUntilLater( FCB, Irp, FUNCTION_CONNECT );
 
     case SOCKET_STATE_CREATED:
-        if( FCB->LocalAddress ) ExFreePool( FCB->LocalAddress );
+        if (FCB->LocalAddress)
+        {
+            ExFreePoolWithTag(FCB->LocalAddress, TAG_AFD_TRANSPORT_ADDRESS);
+        }
+
         FCB->LocalAddress =
             TaBuildNullTransportAddress( ConnectReq->RemoteAddress.Address[0].AddressType );
 
@@ -458,7 +499,11 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     /* Drop through to SOCKET_STATE_BOUND */
 
     case SOCKET_STATE_BOUND:
-        if( FCB->RemoteAddress ) ExFreePool( FCB->RemoteAddress );
+        if (FCB->RemoteAddress)
+        {
+            ExFreePoolWithTag(FCB->RemoteAddress, TAG_AFD_TRANSPORT_ADDRESS);
+        }
+
         FCB->RemoteAddress =
             TaCopyTransportAddress( &ConnectReq->RemoteAddress );
 
@@ -472,14 +517,22 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
         if( !NT_SUCCESS(Status) )
             break;
 
-    if (FCB->ConnectReturnInfo) ExFreePool(FCB->ConnectReturnInfo);
+        if (FCB->ConnectReturnInfo)
+        {
+            ExFreePoolWithTag(FCB->ConnectReturnInfo, TAG_AFD_TDI_CONNECTION_INFORMATION);
+        }
+
         Status = TdiBuildConnectionInfo
             ( &FCB->ConnectReturnInfo,
               &ConnectReq->RemoteAddress );
 
         if( NT_SUCCESS(Status) )
         {
-            if (FCB->ConnectCallInfo) ExFreePool(FCB->ConnectCallInfo);
+            if (FCB->ConnectCallInfo)
+            {
+                ExFreePoolWithTag(FCB->ConnectCallInfo, TAG_AFD_TDI_CONNECTION_INFORMATION);
+            }
+
             Status = TdiBuildConnectionInfo(&FCB->ConnectCallInfo,
                                               &ConnectReq->RemoteAddress);
         }
@@ -494,7 +547,7 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
 
         FCB->State = SOCKET_STATE_CONNECTING;
 
-        AFD_DbgPrint(MID_TRACE,("Queueing IRP %x\n", Irp));
+        AFD_DbgPrint(MID_TRACE,("Queueing IRP %p\n", Irp));
         Status = QueueUserModeIrp( FCB, Irp, FUNCTION_CONNECT );
         if (Status == STATUS_PENDING)
         {
@@ -502,7 +555,6 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
                                 FCB->Connection.Object,
                                 FCB->ConnectCallInfo,
                                 FCB->ConnectReturnInfo,
-                                &FCB->ConnectIrp.Iosb,
                                 StreamSocketConnectComplete,
                                 FCB );
         }
@@ -517,7 +569,7 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp,
         break;
 
     default:
-        AFD_DbgPrint(MIN_TRACE,("Inappropriate socket state %d for connect\n",
+        AFD_DbgPrint(MIN_TRACE,("Inappropriate socket state %u for connect\n",
                                 FCB->State));
         break;
     }