[ros-diffs] [tkreuzer] 49680: [RTL] - Use portable interlocked functions in code, define them to intrinsics for x86 and x64 in the header

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Sun Nov 21 10:05:21 UTC 2010


Author: tkreuzer
Date: Sun Nov 21 10:05:20 2010
New Revision: 49680

URL: http://svn.reactos.org/svn/reactos?rev=49680&view=rev
Log:
[RTL]
- Use portable interlocked functions in code, define them to intrinsics for x86 and x64 in the header

Modified:
    branches/cmake-bringup/lib/rtl/actctx.c
    branches/cmake-bringup/lib/rtl/critical.c
    branches/cmake-bringup/lib/rtl/rtl.h
    branches/cmake-bringup/lib/rtl/srw.c
    branches/cmake-bringup/lib/rtl/timerqueue.c
    branches/cmake-bringup/lib/rtl/vectoreh.c
    branches/cmake-bringup/lib/rtl/wait.c
    branches/cmake-bringup/lib/rtl/workitem.c

Modified: branches/cmake-bringup/lib/rtl/actctx.c
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/lib/rtl/actctx.c?rev=49680&r1=49679&r2=49680&view=diff
==============================================================================
--- branches/cmake-bringup/lib/rtl/actctx.c [iso-8859-1] (original)
+++ branches/cmake-bringup/lib/rtl/actctx.c [iso-8859-1] Sun Nov 21 10:05:20 2010
@@ -575,12 +575,12 @@
 
 static inline void actctx_addref( ACTIVATION_CONTEXT *actctx )
 {
-    _InterlockedExchangeAdd( &actctx->ref_count, 1 );
+    InterlockedExchangeAdd( &actctx->ref_count, 1 );
 }
 
 static void actctx_release( ACTIVATION_CONTEXT *actctx )
 {
-    if (_InterlockedExchangeAdd( &actctx->ref_count, -1 ) == 1)
+    if (InterlockedExchangeAdd( &actctx->ref_count, -1 ) == 1)
     {
         unsigned int i, j;
 

Modified: branches/cmake-bringup/lib/rtl/critical.c
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/lib/rtl/critical.c?rev=49680&r1=49679&r2=49680&view=diff
==============================================================================
--- branches/cmake-bringup/lib/rtl/critical.c [iso-8859-1] (original)
+++ branches/cmake-bringup/lib/rtl/critical.c [iso-8859-1] Sun Nov 21 10:05:20 2010
@@ -59,7 +59,7 @@
 
                 /* We failed, this is bad... */
                 DPRINT1("Failed to Create Event!\n");
-                _InterlockedDecrement(&CriticalSection->LockCount);
+                InterlockedDecrement(&CriticalSection->LockCount);
                 RtlRaiseStatus(Status);
                 return;
         }
@@ -437,7 +437,7 @@
     HANDLE Thread = (HANDLE)NtCurrentTeb()->ClientId.UniqueThread;
 
     /* Try to Lock it */
-    if (_InterlockedIncrement(&CriticalSection->LockCount) != 0) {
+    if (InterlockedIncrement(&CriticalSection->LockCount) != 0) {
 
         /*
          * We've failed to lock it! Does this thread
@@ -621,7 +621,7 @@
     if (--CriticalSection->RecursionCount) {
 
         /* Someone still owns us, but we are free. This needs to be done atomically. */
-        _InterlockedDecrement(&CriticalSection->LockCount);
+        InterlockedDecrement(&CriticalSection->LockCount);
 
     } else {
 
@@ -630,7 +630,7 @@
         CriticalSection->OwningThread = 0;
 
         /* Was someone wanting us? This needs to be done atomically. */
-        if (-1 != _InterlockedDecrement(&CriticalSection->LockCount)) {
+        if (-1 != InterlockedDecrement(&CriticalSection->LockCount)) {
 
             /* Let him have us */
             RtlpUnWaitCriticalSection(CriticalSection);
@@ -662,7 +662,7 @@
 RtlTryEnterCriticalSection(PRTL_CRITICAL_SECTION CriticalSection)
 {
     /* Try to take control */
-    if (_InterlockedCompareExchange(&CriticalSection->LockCount,
+    if (InterlockedCompareExchange(&CriticalSection->LockCount,
                                     0,
                                     -1) == -1) {
 
@@ -674,7 +674,7 @@
    } else if (CriticalSection->OwningThread == NtCurrentTeb()->ClientId.UniqueThread) {
 
         /* It's already ours */
-        _InterlockedIncrement(&CriticalSection->LockCount);
+        InterlockedIncrement(&CriticalSection->LockCount);
         CriticalSection->RecursionCount++;
         return TRUE;
     }

Modified: branches/cmake-bringup/lib/rtl/rtl.h
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/lib/rtl/rtl.h?rev=49680&r1=49679&r2=49680&view=diff
==============================================================================
--- branches/cmake-bringup/lib/rtl/rtl.h [iso-8859-1] (original)
+++ branches/cmake-bringup/lib/rtl/rtl.h [iso-8859-1] Sun Nov 21 10:05:20 2010
@@ -32,6 +32,14 @@
 
 #include <intrin.h>
 
+/* Use intrinsics for x86 and x64 */
+#if defined(_M_IX86) || defined(_M_AMD64)
+#define InterlockedCompareExchange _InterlockedCompareExchange
+#define InterlockedIncrement _InterlockedIncrement
+#define InterlockedDecrement _InterlockedDecrement
+#define InterlockedExchangeAdd _InterlockedExchangeAdd
+#endif
+
 #endif /* RTL_H */
 
 /* EOF */

Modified: branches/cmake-bringup/lib/rtl/srw.c
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/lib/rtl/srw.c?rev=49680&r1=49679&r2=49680&view=diff
==============================================================================
--- branches/cmake-bringup/lib/rtl/srw.c [iso-8859-1] (original)
+++ branches/cmake-bringup/lib/rtl/srw.c [iso-8859-1] Sun Nov 21 10:05:20 2010
@@ -131,7 +131,7 @@
         }
     }
 
-    (void)_InterlockedExchange((PLONG)&SRWLock->Ptr, NewValue);
+    (void)InterlockedExchange((PLONG)&SRWLock->Ptr, NewValue);
 
     if (FirstWaitBlock->Exclusive)
     {
@@ -186,7 +186,7 @@
         NewValue = RTL_SRWLOCK_OWNED;
     }
 
-    (void)_InterlockedExchange((PLONG)&SRWLock->Ptr, NewValue);
+    (void)InterlockedExchange((PLONG)&SRWLock->Ptr, NewValue);
 
     (void)InterlockedOr(&FirstWaitBlock->Wake,
                         TRUE);
@@ -420,7 +420,7 @@
                 NewValue = (CurrentValue >> RTL_SRWLOCK_BITS) + 1;
                 NewValue = (NewValue << RTL_SRWLOCK_BITS) | (CurrentValue & RTL_SRWLOCK_MASK);
 
-                if (_InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
+                if (InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
                                                 NewValue,
                                                 CurrentValue) == CurrentValue)
                 {
@@ -499,7 +499,7 @@
                     ASSERT_SRW_WAITBLOCK(&StackWaitBlock);
 
                     NewValue = (ULONG_PTR)&StackWaitBlock | RTL_SRWLOCK_OWNED | RTL_SRWLOCK_CONTENDED;
-                    if (_InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
+                    if (InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
                                                     NewValue,
                                                     CurrentValue) == CurrentValue)
                     {
@@ -521,7 +521,7 @@
                    RTL_SRWLOCK_SHARED nor the RTL_SRWLOCK_OWNED bit is set */
                 ASSERT(!(CurrentValue & RTL_SRWLOCK_CONTENDED));
 
-                if (_InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
+                if (InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
                                                 NewValue,
                                                 CurrentValue) == CurrentValue)
                 {
@@ -580,7 +580,7 @@
                     NewValue = (NewValue << RTL_SRWLOCK_BITS) | RTL_SRWLOCK_SHARED | RTL_SRWLOCK_OWNED;
                 }
 
-                if (_InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
+                if (InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
                                                 NewValue,
                                                 CurrentValue) == CurrentValue)
                 {
@@ -639,7 +639,7 @@
 
                     NewValue = (ULONG_PTR)&StackWaitBlock | RTL_SRWLOCK_SHARED | RTL_SRWLOCK_CONTENDED | RTL_SRWLOCK_OWNED;
 
-                    if (_InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
+                    if (InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
                                                     NewValue,
                                                     CurrentValue) == CurrentValue)
                     {
@@ -697,7 +697,7 @@
                         ASSERT_SRW_WAITBLOCK(&StackWaitBlock);
 
                         NewValue = (ULONG_PTR)&StackWaitBlock | RTL_SRWLOCK_OWNED | RTL_SRWLOCK_CONTENDED;
-                        if (_InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
+                        if (InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
                                                         NewValue,
                                                         CurrentValue) == CurrentValue)
                         {
@@ -767,7 +767,7 @@
                 ASSERT(!(CurrentValue & ~RTL_SRWLOCK_OWNED));
 
                 NewValue = 0;
-                if (_InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
+                if (InterlockedCompareExchange((PLONG)&SRWLock->Ptr,
                                                 NewValue,
                                                 CurrentValue) == CurrentValue)
                 {

Modified: branches/cmake-bringup/lib/rtl/timerqueue.c
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/lib/rtl/timerqueue.c?rev=49680&r1=49679&r2=49680&view=diff
==============================================================================
--- branches/cmake-bringup/lib/rtl/timerqueue.c [iso-8859-1] (original)
+++ branches/cmake-bringup/lib/rtl/timerqueue.c [iso-8859-1] Sun Nov 21 10:05:20 2010
@@ -372,7 +372,7 @@
             NTSTATUS status = RtlCreateTimerQueue(&q);
             if (status == STATUS_SUCCESS)
             {
-                PVOID p = _InterlockedCompareExchangePointer(
+                PVOID p = InterlockedCompareExchangePointer(
                     (void **) &default_timer_queue, q, NULL);
                 if (p)
                     /* Got beat to the punch.  */

Modified: branches/cmake-bringup/lib/rtl/vectoreh.c
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/lib/rtl/vectoreh.c?rev=49680&r1=49679&r2=49680&view=diff
==============================================================================
--- branches/cmake-bringup/lib/rtl/vectoreh.c [iso-8859-1] (original)
+++ branches/cmake-bringup/lib/rtl/vectoreh.c [iso-8859-1] Sun Nov 21 10:05:20 2010
@@ -61,7 +61,7 @@
         if (--veh->Refs == 0)
         {
           RemoveEntryList (&veh->ListEntry);
-          _InterlockedDecrement (&RtlpVectoredExceptionsInstalled);
+          InterlockedDecrement (&RtlpVectoredExceptionsInstalled);
           Remove = TRUE;
         }
         Ret = TRUE;
@@ -74,7 +74,7 @@
       {
         CurrentEntry = veh->ListEntry.Flink;
         RemoveEntryList (&veh->ListEntry);
-        _InterlockedDecrement (&RtlpVectoredExceptionsInstalled);
+        InterlockedDecrement (&RtlpVectoredExceptionsInstalled);
         RtlLeaveCriticalSection(&RtlpVectoredExceptionLock);
         
         RtlFreeHeap(RtlGetProcessHeap(),
@@ -136,7 +136,7 @@
       InsertTailList(&RtlpVectoredExceptionHead,
                      &veh->ListEntry);
     }
-    _InterlockedIncrement (&RtlpVectoredExceptionsInstalled);
+    InterlockedIncrement (&RtlpVectoredExceptionsInstalled);
     RtlLeaveCriticalSection(&RtlpVectoredExceptionLock);
   }
 

Modified: branches/cmake-bringup/lib/rtl/wait.c
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/lib/rtl/wait.c?rev=49680&r1=49679&r2=49680&view=diff
==============================================================================
--- branches/cmake-bringup/lib/rtl/wait.c [iso-8859-1] (original)
+++ branches/cmake-bringup/lib/rtl/wait.c [iso-8859-1] Sun Nov 21 10:05:20 2010
@@ -91,7 +91,7 @@
     completion_event = Wait->CompletionEvent;
     if (completion_event) NtSetEvent( completion_event, NULL );
 
-    if (_InterlockedIncrement( &Wait->DeleteCount ) == 2 )
+    if (InterlockedIncrement( &Wait->DeleteCount ) == 2 )
     {
        NtClose( Wait->CancelEvent );
        RtlFreeHeap( RtlGetProcessHeap(), 0, Wait );
@@ -220,7 +220,7 @@
                 if (Status != STATUS_SUCCESS)
                     return Status;
 
-                (void)_InterlockedExchangePointer( &Wait->CompletionEvent, CompletionEvent );
+                (void)InterlockedExchangePointer( &Wait->CompletionEvent, CompletionEvent );
 
                 if (Wait->CallbackInProgress)
                     NtWaitForSingleObject( CompletionEvent, FALSE, NULL );
@@ -229,7 +229,7 @@
             }
             else
             {
-                (void)_InterlockedExchangePointer( &Wait->CompletionEvent, CompletionEvent );
+                (void)InterlockedExchangePointer( &Wait->CompletionEvent, CompletionEvent );
 
                 if (Wait->CallbackInProgress)
                     Status = STATUS_PENDING;
@@ -239,7 +239,7 @@
             Status = STATUS_PENDING;
     }
 
-    if (_InterlockedIncrement( &Wait->DeleteCount ) == 2 )
+    if (InterlockedIncrement( &Wait->DeleteCount ) == 2 )
     {
         Status = STATUS_SUCCESS;
         NtClose( Wait->CancelEvent );

Modified: branches/cmake-bringup/lib/rtl/workitem.c
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/lib/rtl/workitem.c?rev=49680&r1=49679&r2=49680&view=diff
==============================================================================
--- branches/cmake-bringup/lib/rtl/workitem.c [iso-8859-1] (original)
+++ branches/cmake-bringup/lib/rtl/workitem.c [iso-8859-1] Sun Nov 21 10:05:20 2010
@@ -55,7 +55,7 @@
 
     do
     {
-        InitStatus = _InterlockedCompareExchange(&ThreadPoolInitialized,
+        InitStatus = InterlockedCompareExchange(&ThreadPoolInitialized,
                                                  2,
                                                  0);
         if (InitStatus == 0)
@@ -91,7 +91,7 @@
 
 Finish:
             /* Initialization done */
-            _InterlockedExchange(&ThreadPoolInitialized,
+            InterlockedExchange(&ThreadPoolInitialized,
                                  1);
             break;
         }
@@ -223,11 +223,11 @@
     }
 
     /* update the requests counter */
-    _InterlockedDecrement(&ThreadPoolWorkerThreadsRequests);
+    InterlockedDecrement(&ThreadPoolWorkerThreadsRequests);
 
     if (WorkItem.Flags & WT_EXECUTELONGFUNCTION)
     {
-        _InterlockedDecrement(&ThreadPoolWorkerThreadsLongRequests);
+        InterlockedDecrement(&ThreadPoolWorkerThreadsLongRequests);
     }
 }
 
@@ -237,11 +237,11 @@
 {
     NTSTATUS Status = STATUS_SUCCESS;
 
-    _InterlockedIncrement(&ThreadPoolWorkerThreadsRequests);
+    InterlockedIncrement(&ThreadPoolWorkerThreadsRequests);
 
     if (WorkItem->Flags & WT_EXECUTELONGFUNCTION)
     {
-        _InterlockedIncrement(&ThreadPoolWorkerThreadsLongRequests);
+        InterlockedIncrement(&ThreadPoolWorkerThreadsLongRequests);
     }
 
     if (WorkItem->Flags & WT_EXECUTEINPERSISTENTTHREAD)
@@ -270,11 +270,11 @@
 
     if (!NT_SUCCESS(Status))
     {
-        _InterlockedDecrement(&ThreadPoolWorkerThreadsRequests);
+        InterlockedDecrement(&ThreadPoolWorkerThreadsRequests);
 
         if (WorkItem->Flags & WT_EXECUTELONGFUNCTION)
         {
-            _InterlockedDecrement(&ThreadPoolWorkerThreadsLongRequests);
+            InterlockedDecrement(&ThreadPoolWorkerThreadsLongRequests);
         }
     }
 
@@ -351,11 +351,11 @@
     }
 
     /* update the requests counter */
-    _InterlockedDecrement(&ThreadPoolIOWorkerThreadsRequests);
+    InterlockedDecrement(&ThreadPoolIOWorkerThreadsRequests);
 
     if (WorkItem.Flags & WT_EXECUTELONGFUNCTION)
     {
-        _InterlockedDecrement(&ThreadPoolIOWorkerThreadsLongRequests);
+        InterlockedDecrement(&ThreadPoolIOWorkerThreadsLongRequests);
     }
 }
 
@@ -461,14 +461,14 @@
 
     ASSERT(IoThread != NULL);
 
-    _InterlockedIncrement(&ThreadPoolIOWorkerThreadsRequests);
+    InterlockedIncrement(&ThreadPoolIOWorkerThreadsRequests);
 
     if (WorkItem->Flags & WT_EXECUTELONGFUNCTION)
     {
         /* We're about to queue a long function, mark the thread */
         IoThread->Flags |= WT_EXECUTELONGFUNCTION;
 
-        _InterlockedIncrement(&ThreadPoolIOWorkerThreadsLongRequests);
+        InterlockedIncrement(&ThreadPoolIOWorkerThreadsLongRequests);
     }
 
     /* It's time to queue the work item */
@@ -480,11 +480,11 @@
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("Failed to queue APC for work item 0x%p\n", WorkItem->Function);
-        _InterlockedDecrement(&ThreadPoolIOWorkerThreadsRequests);
+        InterlockedDecrement(&ThreadPoolIOWorkerThreadsRequests);
 
         if (WorkItem->Flags & WT_EXECUTELONGFUNCTION)
         {
-            _InterlockedDecrement(&ThreadPoolIOWorkerThreadsLongRequests);
+            InterlockedDecrement(&ThreadPoolIOWorkerThreadsLongRequests);
         }
     }
 
@@ -543,7 +543,7 @@
     BOOLEAN Terminate;
     NTSTATUS Status = STATUS_SUCCESS;
 
-    if (_InterlockedIncrement(&ThreadPoolIOWorkerThreads) > MAX_WORKERTHREADS)
+    if (InterlockedIncrement(&ThreadPoolIOWorkerThreads) > MAX_WORKERTHREADS)
     {
         /* Oops, too many worker threads... */
         goto InitFailed;
@@ -562,10 +562,10 @@
         DPRINT1("Failed to create handle to own thread! Status: 0x%x\n", Status);
 
 InitFailed:
-        _InterlockedDecrement(&ThreadPoolIOWorkerThreads);
+        InterlockedDecrement(&ThreadPoolIOWorkerThreads);
 
         /* Signal initialization completion */
-        _InterlockedExchange((PLONG)Parameter,
+        InterlockedExchange((PLONG)Parameter,
                             1);
 
         RtlExitUserThread(Status);
@@ -579,7 +579,7 @@
                    (PLIST_ENTRY)&ThreadInfo.ListEntry);
 
     /* Signal initialization completion */
-    _InterlockedExchange((PLONG)Parameter,
+    InterlockedExchange((PLONG)Parameter,
                          1);
 
     for (;;)
@@ -626,7 +626,7 @@
             if (Terminate)
             {
                 /* Rundown the thread and unlink it from the list */
-                _InterlockedDecrement(&ThreadPoolIOWorkerThreads);
+                InterlockedDecrement(&ThreadPoolIOWorkerThreads);
                 RemoveEntryList((PLIST_ENTRY)&ThreadInfo.ListEntry);
             }
 
@@ -663,10 +663,10 @@
     PKNORMAL_ROUTINE ApcRoutine;
     NTSTATUS Status = STATUS_SUCCESS;
 
-    if (_InterlockedIncrement(&ThreadPoolWorkerThreads) > MAX_WORKERTHREADS)
+    if (InterlockedIncrement(&ThreadPoolWorkerThreads) > MAX_WORKERTHREADS)
     {
         /* Signal initialization completion */
-        _InterlockedExchange((PLONG)Parameter,
+        InterlockedExchange((PLONG)Parameter,
                              1);
 
         /* Oops, too many worker threads... */
@@ -675,7 +675,7 @@
     }
 
     /* Signal initialization completion */
-    _InterlockedExchange((PLONG)Parameter,
+    InterlockedExchange((PLONG)Parameter,
                          1);
 
     for (;;)
@@ -736,7 +736,7 @@
 
             if (Terminate)
             {
-                _InterlockedDecrement(&ThreadPoolWorkerThreads);
+                InterlockedDecrement(&ThreadPoolWorkerThreads);
                 Status = STATUS_SUCCESS;
                 break;
             }




More information about the Ros-diffs mailing list