[ros-diffs] [sginsberg] 35542: - Remove a LIST_FOR_EACH - ASSERTify 2 assumptions - Rename "ListEntry" to "NextEntry" for clarification

sginsberg at svn.reactos.org sginsberg at svn.reactos.org
Fri Aug 22 23:24:32 CEST 2008


Author: sginsberg
Date: Fri Aug 22 16:24:31 2008
New Revision: 35542

URL: http://svn.reactos.org/svn/reactos?rev=35542&view=rev
Log:
- Remove a LIST_FOR_EACH
- ASSERTify 2 assumptions
- Rename "ListEntry" to "NextEntry" for clarification

Modified:
    trunk/reactos/ntoskrnl/ke/devqueue.c

Modified: trunk/reactos/ntoskrnl/ke/devqueue.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/devqueue.c?rev=35542&r1=35541&r2=35542&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/devqueue.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/devqueue.c [iso-8859-1] Fri Aug 22 16:24:31 2008
@@ -197,7 +197,7 @@
 KeRemoveByKeyDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue,
                          IN ULONG SortKey)
 {
-    PLIST_ENTRY ListEntry;
+    PLIST_ENTRY NextEntry;
     PKDEVICE_QUEUE_ENTRY ReturnEntry;
     KLOCK_QUEUE_HANDLE DeviceLock;
     ASSERT_DEVICE_QUEUE(DeviceQueue);
@@ -218,8 +218,8 @@
     else
     {
         /* If SortKey is greater than the last key, then return the first entry right away */
-        ListEntry = &DeviceQueue->DeviceListHead;
-        ReturnEntry = CONTAINING_RECORD(ListEntry->Blink,
+        NextEntry = &DeviceQueue->DeviceListHead;
+        ReturnEntry = CONTAINING_RECORD(NextEntry->Blink,
                                         KDEVICE_QUEUE_ENTRY,
                                         DeviceListEntry);
 
@@ -227,24 +227,27 @@
         if (ReturnEntry->SortKey <= SortKey)
         {
             /* Get the first entry */
-            ReturnEntry = CONTAINING_RECORD(ListEntry->Flink,
+            ReturnEntry = CONTAINING_RECORD(NextEntry->Flink,
                                             KDEVICE_QUEUE_ENTRY,
                                             DeviceListEntry);
         }
         else
         {
             /* Loop the list */
-            ListEntry = DeviceQueue->DeviceListHead.Flink;
+            NextEntry = DeviceQueue->DeviceListHead.Flink;
             while (TRUE)
             {
+                /* Make sure we don't go beyond the end of the queue */
+                ASSERT(NextEntry != &DeviceQueue->DeviceListHead);
+
                 /* Get the next entry and check if the key is low enough */
-                ReturnEntry = CONTAINING_RECORD(ListEntry,
+                ReturnEntry = CONTAINING_RECORD(NextEntry,
                                                 KDEVICE_QUEUE_ENTRY,
                                                 DeviceListEntry);
                 if (SortKey <= ReturnEntry->SortKey) break;
 
                 /* Try the next one */
-                ListEntry = ListEntry->Flink;
+                NextEntry = NextEntry->Flink;
             }
         }
 
@@ -270,7 +273,7 @@
 KeRemoveByKeyDeviceQueueIfBusy(IN PKDEVICE_QUEUE DeviceQueue,
                                IN ULONG SortKey)
 {
-    PLIST_ENTRY ListEntry;
+    PLIST_ENTRY NextEntry;
     PKDEVICE_QUEUE_ENTRY ReturnEntry;
     KLOCK_QUEUE_HANDLE DeviceLock;
     ASSERT_DEVICE_QUEUE(DeviceQueue);
@@ -289,27 +292,42 @@
     }
     else
     {
-        /* Find entry with SortKey greater than or equal to the passed-in SortKey */
-        LIST_FOR_EACH(ReturnEntry, &DeviceQueue->DeviceListHead, KDEVICE_QUEUE_ENTRY, DeviceListEntry) 
-        {
-            /* Check if keys match */
-            if (ReturnEntry->SortKey >= SortKey)
-            {
-               /* We found it, so just remove it */
-               RemoveEntryList(&ReturnEntry->DeviceListEntry);
-               break;
-            }
-        }
-
-        /* Check if we found something */
-        if (!ReturnEntry)
-        {
-            /*  Not found, return the first entry */
-            ListEntry = RemoveHeadList(&DeviceQueue->DeviceListHead);
-            ReturnEntry = CONTAINING_RECORD(ListEntry,
+        /* If SortKey is greater than the last key, then return the first entry right away */
+        NextEntry = &DeviceQueue->DeviceListHead;
+        ReturnEntry = CONTAINING_RECORD(NextEntry->Blink,
+                                        KDEVICE_QUEUE_ENTRY,
+                                        DeviceListEntry);
+
+        /* Check if we can just get the first entry */
+        if (ReturnEntry->SortKey <= SortKey)
+        {
+            /* Get the first entry */
+            ReturnEntry = CONTAINING_RECORD(NextEntry->Flink,
                                             KDEVICE_QUEUE_ENTRY,
                                             DeviceListEntry);
         }
+        else
+        {
+            /* Loop the list */
+            NextEntry = DeviceQueue->DeviceListHead.Flink;
+            while (TRUE)
+            {
+                /* Make sure we don't go beyond the end of the queue */
+                ASSERT(NextEntry != &DeviceQueue->DeviceListHead);
+
+                /* Get the next entry and check if the key is low enough */
+                ReturnEntry = CONTAINING_RECORD(NextEntry,
+                                                KDEVICE_QUEUE_ENTRY,
+                                                DeviceListEntry);
+                if (SortKey <= ReturnEntry->SortKey) break;
+
+                /* Try the next one */
+                NextEntry = NextEntry->Flink;
+            }
+        }
+
+        /* We have an entry, remove it now */
+        RemoveEntryList(&ReturnEntry->DeviceListEntry);
 
         /* Set it as non-inserted */
         ReturnEntry->Inserted = FALSE;



More information about the Ros-diffs mailing list