[AFD] Introduce and use pool tags. Thanks go to Arty for assisting me with this....
[reactos.git] / drivers / network / afd / afd / select.c
index ceda022..6c8e5a2 100644 (file)
@@ -7,6 +7,7 @@
  * UPDATE HISTORY:
  * 20040708 Created
  */
+
 #include "afd.h"
 
 static VOID PrintEvents( ULONG Events ) {
@@ -67,7 +68,7 @@ VOID SignalSocket(
     {
         KeCancelTimer( &Poll->Timer );
         RemoveEntryList( &Poll->ListEntry );
-        ExFreePool( Poll );
+        ExFreePoolWithTag(Poll, TAG_AFD_ACTIVE_POLL);
     }
 
     Irp->IoStatus.Status = Status;
@@ -91,7 +92,8 @@ VOID SignalSocket(
     AFD_DbgPrint(MID_TRACE,("Done\n"));
 }
 
-static VOID SelectTimeout( PKDPC Dpc,
+static KDEFERRED_ROUTINE SelectTimeout;
+static VOID NTAPI SelectTimeout( PKDPC Dpc,
                            PVOID DeferredContext,
                            PVOID SystemArgument1,
                            PVOID SystemArgument2 ) {
@@ -101,6 +103,10 @@ static VOID SelectTimeout( PKDPC Dpc,
     KIRQL OldIrql;
     PAFD_DEVICE_EXTENSION DeviceExt;
 
+    UNREFERENCED_PARAMETER(Dpc);
+    UNREFERENCED_PARAMETER(SystemArgument1);
+    UNREFERENCED_PARAMETER(SystemArgument2);
+
     AFD_DbgPrint(MID_TRACE,("Called\n"));
 
     Irp = Poll->Irp;
@@ -127,7 +133,7 @@ VOID KillSelectsForFCB( PAFD_DEVICE_EXTENSION DeviceExt,
     PAFD_HANDLE HandleArray;
     UINT i;
 
-    AFD_DbgPrint(MID_TRACE,("Killing selects that refer to %x\n", FileObject));
+    AFD_DbgPrint(MID_TRACE,("Killing selects that refer to %p\n", FileObject));
 
     KeAcquireSpinLock( &DeviceExt->Lock, &OldIrql );
 
@@ -140,7 +146,7 @@ VOID KillSelectsForFCB( PAFD_DEVICE_EXTENSION DeviceExt,
         HandleArray = AFD_HANDLES(PollReq);
 
         for( i = 0; i < PollReq->HandleCount; i++ ) {
-            AFD_DbgPrint(MAX_TRACE,("Req: %x, This %x\n",
+            AFD_DbgPrint(MAX_TRACE,("Req: %u, This %p\n",
                                     HandleArray[i].Handle, FileObject));
             if( (PVOID)HandleArray[i].Handle == FileObject &&
                 (!OnlyExclusive || (OnlyExclusive && Poll->Exclusive)) ) {
@@ -167,7 +173,9 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
     UINT i, Signalled = 0;
     ULONG Exclusive = PollReq->Exclusive;
 
-    AFD_DbgPrint(MID_TRACE,("Called (HandleCount %d Timeout %d)\n",
+    UNREFERENCED_PARAMETER(IrpSp);
+
+    AFD_DbgPrint(MID_TRACE,("Called (HandleCount %u Timeout %d)\n",
                             PollReq->HandleCount,
                             (INT)(PollReq->Timeout.QuadPart)));
 
@@ -206,7 +214,7 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
         PollReq->Handles[i].Status =
             PollReq->Handles[i].Events & FCB->PollState;
         if( PollReq->Handles[i].Status ) {
-            AFD_DbgPrint(MID_TRACE,("Signalling %x with %x\n",
+            AFD_DbgPrint(MID_TRACE,("Signalling %p with %x\n",
                                     FCB, FCB->PollState));
             Signalled++;
         }
@@ -220,7 +228,9 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
 
        PAFD_ACTIVE_POLL Poll = NULL;
 
-       Poll = ExAllocatePool( NonPagedPool, sizeof(AFD_ACTIVE_POLL) );
+       Poll = ExAllocatePoolWithTag(NonPagedPool,
+                                    sizeof(AFD_ACTIVE_POLL),
+                                    TAG_AFD_ACTIVE_POLL);
 
        if (Poll){
           Poll->Irp = Irp;
@@ -229,9 +239,7 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
 
           KeInitializeTimerEx( &Poll->Timer, NotificationTimer );
 
-          KeInitializeDpc( (PRKDPC)&Poll->TimeoutDpc,
-             (PKDEFERRED_ROUTINE)SelectTimeout,
-             Poll );
+          KeInitializeDpc( (PRKDPC)&Poll->TimeoutDpc, SelectTimeout, Poll );
 
           InsertTailList( &DeviceExt->Polls, &Poll->ListEntry );
 
@@ -262,6 +270,8 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
         (PAFD_EVENT_SELECT_INFO)LockRequest( Irp, IrpSp, FALSE, NULL );
     PAFD_FCB FCB = FileObject->FsContext;
 
+    UNREFERENCED_PARAMETER(DeviceObject);
+
     if( !SocketAcquireStateLock( FCB ) ) {
         return LostSocket( Irp );
     }
@@ -270,7 +280,7 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
          return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp,
                                         0 );
     }
-    AFD_DbgPrint(MID_TRACE,("Called (Event %x Triggers %x)\n",
+    AFD_DbgPrint(MID_TRACE,("Called (Event %p Triggers %u)\n",
                             EventSelectInfo->EventObject,
                             EventSelectInfo->Events));
 
@@ -281,7 +291,7 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
         Status = ObReferenceObjectByHandle( (PVOID)EventSelectInfo->
                                             EventObject,
                                             EVENT_ALL_ACCESS,
-                                            ExEventObjectType,
+                                            *ExEventObjectType,
                                             UserMode,
                                             (PVOID *)&FCB->EventSelect,
                                             NULL );
@@ -302,7 +312,7 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
     if((FCB->EventSelect) &&
        (FCB->PollState & (FCB->EventSelectTriggers & ~FCB->EventSelectDisabled)))
     {
-        AFD_DbgPrint(MID_TRACE,("Setting event %x\n", FCB->EventSelect));
+        AFD_DbgPrint(MID_TRACE,("Setting event %p\n", FCB->EventSelect));
 
         /* Set the application's event */
         KeSetEvent( FCB->EventSelect, IO_NETWORK_INCREMENT, FALSE );
@@ -324,7 +334,9 @@ AfdEnumEvents( PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PKEVENT UserEvent;
     NTSTATUS Status;
 
-    AFD_DbgPrint(MID_TRACE,("Called (FCB %x)\n", FCB));
+    UNREFERENCED_PARAMETER(DeviceObject);
+
+    AFD_DbgPrint(MID_TRACE,("Called (FCB %p)\n", FCB));
 
     if( !SocketAcquireStateLock( FCB ) ) {
         return LostSocket( Irp );
@@ -334,21 +346,25 @@ AfdEnumEvents( PDEVICE_OBJECT DeviceObject, PIRP Irp,
          return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0 );
     }
 
-    Status = ObReferenceObjectByHandle(EnumReq->Event,
-                                       EVENT_ALL_ACCESS,
-                                       ExEventObjectType,
-                                       UserMode,
-                                       (PVOID *)&UserEvent,
-                                       NULL);
-    if (!NT_SUCCESS(Status))
+    /* An event may optionally be provided for us to clear */
+    if (EnumReq->Event != NULL)
     {
-        AFD_DbgPrint(MIN_TRACE,("Unable to reference event %x\n", Status));
-        return UnlockAndMaybeComplete(FCB, Status, Irp, 0);
-    }
+        Status = ObReferenceObjectByHandle(EnumReq->Event,
+                                           EVENT_ALL_ACCESS,
+                                           *ExEventObjectType,
+                                           UserMode,
+                                           (PVOID *)&UserEvent,
+                                           NULL);
+        if (!NT_SUCCESS(Status))
+        {
+            AFD_DbgPrint(MIN_TRACE,("Unable to reference event %x\n", Status));
+            return UnlockAndMaybeComplete(FCB, Status, Irp, 0);
+        }
 
-    /* Clear the event */
-    KeClearEvent(UserEvent);
-    ObDereferenceObject(UserEvent);
+        /* Clear the event */
+        KeClearEvent(UserEvent);
+        ObDereferenceObject(UserEvent);
+    }
 
     /* Copy the poll state, masking out disabled events */
     EnumReq->PollEvents = (FCB->PollState & ~FCB->EventSelectDisabled);
@@ -379,7 +395,7 @@ static BOOLEAN UpdatePollWithFCB( PAFD_ACTIVE_POLL Poll, PFILE_OBJECT FileObject
 
         PollReq->Handles[i].Status = PollReq->Handles[i].Events & FCB->PollState;
         if( PollReq->Handles[i].Status ) {
-            AFD_DbgPrint(MID_TRACE,("Signalling %x with %x\n",
+            AFD_DbgPrint(MID_TRACE,("Signalling %p with %x\n",
                                     FCB, FCB->PollState));
             Signalled++;
         }
@@ -395,7 +411,7 @@ VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject ) {
     KIRQL OldIrql;
     PAFD_POLL_INFO PollReq;
 
-    AFD_DbgPrint(MID_TRACE,("Called: DeviceExt %x FileObject %x\n",
+    AFD_DbgPrint(MID_TRACE,("Called: DeviceExt %p FileObject %p\n",
                             DeviceExt, FileObject));
 
     KeAcquireSpinLock( &DeviceExt->Lock, &OldIrql );
@@ -414,7 +430,7 @@ VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject ) {
     while( ThePollEnt != &DeviceExt->Polls ) {
         Poll = CONTAINING_RECORD( ThePollEnt, AFD_ACTIVE_POLL, ListEntry );
         PollReq = Poll->Irp->AssociatedIrp.SystemBuffer;
-        AFD_DbgPrint(MID_TRACE,("Checking poll %x\n", Poll));
+        AFD_DbgPrint(MID_TRACE,("Checking poll %p\n", Poll));
 
         if( UpdatePollWithFCB( Poll, FileObject ) ) {
             ThePollEnt = ThePollEnt->Flink;
@@ -429,7 +445,7 @@ VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject ) {
     if((FCB->EventSelect) &&
        (FCB->PollState & (FCB->EventSelectTriggers & ~FCB->EventSelectDisabled)))
     {
-        AFD_DbgPrint(MID_TRACE,("Setting event %x\n", FCB->EventSelect));
+        AFD_DbgPrint(MID_TRACE,("Setting event %p\n", FCB->EventSelect));
 
         /* Set the application's event */
         KeSetEvent( FCB->EventSelect, IO_NETWORK_INCREMENT, FALSE );