Sync to trunk head (r42241)
[reactos.git] / reactos / ntoskrnl / ex / fastinterlck.c
index 18fd854..c247bec 100644 (file)
@@ -19,6 +19,7 @@
 #undef ExInterlockedAddULong
 #undef ExInterlockedIncrementLong
 #undef ExInterlockedDecrementLong
+#undef ExInterlockedAddLargeStatistic
 
 /* FUNCTIONS ******************************************************************/
 
@@ -36,9 +37,9 @@ InterlockedPushEntrySList(IN PSLIST_HEADER ListHead,
     {
         Entry->Next = FirstEntry;
         NextEntry = FirstEntry;
-        FirstEntry = (PVOID)_InterlockedCompareExchange((PLONG)Head,
-                                                        (LONG)Entry,
-                                                        (LONG)FirstEntry);
+        FirstEntry = InterlockedCompareExchangePointer((PVOID*)Head,
+                                                       (PVOID)Entry,
+                                                       (PVOID)FirstEntry);
     } while (FirstEntry != NextEntry);
     
     return FirstEntry;
@@ -56,9 +57,9 @@ InterlockedPopEntrySList(IN PSLIST_HEADER ListHead)
         if (!FirstEntry) return NULL;
 
         NextEntry = FirstEntry;
-        FirstEntry = (PVOID)_InterlockedCompareExchange((PLONG)Head,
-                                                        (LONG)FirstEntry->Next,
-                                                        (LONG)FirstEntry);
+        FirstEntry = InterlockedCompareExchangePointer((PVOID*)Head,
+                                                       (PVOID)FirstEntry->Next,
+                                                       (PVOID)FirstEntry);
     } while (FirstEntry != NextEntry);
 
     return FirstEntry;    
@@ -68,13 +69,14 @@ PSINGLE_LIST_ENTRY
 FASTCALL
 ExInterlockedFlushSList(IN PSLIST_HEADER ListHead)
 {
-    return (PVOID)_InterlockedExchange((PLONG)&ListHead->Next.Next, (LONG)NULL);
+    return InterlockedExchangePointer((PVOID*)&ListHead->Next.Next, NULL);
 }
 
 PSLIST_ENTRY
 FASTCALL
 ExInterlockedPushEntrySList(IN PSLIST_HEADER ListHead,
-                            IN PSLIST_ENTRY ListEntry)
+                            IN PSLIST_ENTRY ListEntry,
+                            IN PKSPIN_LOCK Lock)
 {
     return InterlockedPushEntrySList(ListHead, ListEntry);
 }
@@ -88,7 +90,7 @@ ExInterlockedPopEntrySList(IN PSLIST_HEADER ListHead,
 }
 
 ULONG
-NTAPI
+FASTCALL
 ExfInterlockedAddUlong(IN PULONG Addend,
                        IN ULONG Increment,
                        PKSPIN_LOCK Lock)
@@ -104,12 +106,12 @@ LONGLONG
 FASTCALL
 ExfInterlockedCompareExchange64(IN OUT LONGLONG volatile *Destination,
                                 IN PLONGLONG Exchange,
-                                IN PLONGLONG Comperand)
+                                IN PLONGLONG Comparand)
 {
     LONGLONG Result;
     
     Result = *Destination;
-    if (*Destination == Result) *Destination = *Exchange;
+    if (*Destination == *Comparand) *Destination = *Exchange;
     return Result;
 }
 
@@ -287,7 +289,7 @@ ExInterlockedRemoveHeadList(IN PLIST_ENTRY ListHead,
 
 VOID
 FASTCALL
-ExInterlockedAddLargeStatistic(IN PLARGE_INTEGER Addend,
+ExInterlockedAddLargeStatistic(IN PLONGLONG Addend,
                                IN ULONG Increment)
 {
     UNIMPLEMENTED;
@@ -295,7 +297,7 @@ ExInterlockedAddLargeStatistic(IN PLARGE_INTEGER Addend,
 
 LONGLONG
 FASTCALL
-ExInterlockedCompareExchange64(IN OUT PLONGLONG Destination,
+ExInterlockedCompareExchange64(IN OUT LONGLONG volatile *Destination,
                                IN PLONGLONG Exchange,
                                IN PLONGLONG Comparand,
                                IN PKSPIN_LOCK Lock)
@@ -305,7 +307,7 @@ ExInterlockedCompareExchange64(IN OUT PLONGLONG Destination,
     
     KeAcquireSpinLock(Lock, &OldIrql);
     Result = *Destination;
-    if (*Destination == Result) *Destination = *Exchange;
+    if (*Destination == *Comparand) *Destination = *Exchange;
     KeReleaseSpinLock(Lock, OldIrql);
     return Result;
 }