[AFD] Introduce and use pool tags. Thanks go to Arty for assisting me with this....
[reactos.git] / drivers / network / afd / afd / select.c
index 2e30ca3..6c8e5a2 100644 (file)
@@ -68,7 +68,7 @@ VOID SignalSocket(
     {
         KeCancelTimer( &Poll->Timer );
         RemoveEntryList( &Poll->ListEntry );
-        ExFreePool( Poll );
+        ExFreePoolWithTag(Poll, TAG_AFD_ACTIVE_POLL);
     }
 
     Irp->IoStatus.Status = Status;
@@ -228,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;
@@ -344,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);