]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: implement InterlockedAnd/Or for X86 Debug
authorJeffrey Altman <jaltman@your-file-system.com>
Tue, 9 Aug 2011 21:25:50 +0000 (17:25 -0400)
committerDerrick Brashear <shadow@dementia.org>
Fri, 12 Aug 2011 15:59:39 +0000 (08:59 -0700)
Reviewed-on: http://gerrit.openafs.org/5191
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
(cherry picked from commit ec1295d11b5e75fa942fe8c3a0f16309c5486ed4)

Change-Id: Icd6b76abec2c9a677b5e344ef36587bfbe696a43
Reviewed-on: http://gerrit.openafs.org/5212
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
src/WINNT/afsd/cm_utils.h

index a7fafbaae66d66a908fdb499767379f6c1b8c397..8a3440c7b81ad0bdd9ba8c01e1c07c36f366137c 100644 (file)
@@ -110,4 +110,41 @@ extern void cm_utilsInit(void);
 
 extern void cm_utilsCleanup(void);
 
+__inline void
+cm_InterlockedAnd(LONG * pdest, LONG value)
+{
+    LONG orig, current, new;
+
+    current = *pdest;
+
+    do
+    {
+        orig = current;
+        new = orig & value;
+        current = _InterlockedCompareExchange(pdest, new, orig);
+    } while (orig != current);
+}
+
+__inline void
+cm_InterlockedOr(LONG * pdest, LONG value)
+{
+    LONG orig, current, new;
+
+    current = *pdest;
+
+    do
+    {
+        orig = current;
+        new = orig | value;
+        current = _InterlockedCompareExchange(pdest, new, orig);
+    } while (orig != current);
+}
+
+#ifdef DEBUG
+#ifdef _M_IX86
+#define _InterlockedOr   cm_InterlockedOr
+#define _InterlockedAnd  cm_InterlockedAnd
+#endif
+#endif
+
 #endif /*  OPENAFS_WINNT_AFSD_CM_UTILS_H */