From ec1295d11b5e75fa942fe8c3a0f16309c5486ed4 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 9 Aug 2011 17:25:50 -0400 Subject: [PATCH] Windows: implement InterlockedAnd/Or for X86 Debug Change-Id: I56b3f9534daf0cd152eeea293b1a357d062b9166 Reviewed-on: http://gerrit.openafs.org/5191 Tested-by: BuildBot Reviewed-by: Derrick Brashear Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsd/cm_utils.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/WINNT/afsd/cm_utils.h b/src/WINNT/afsd/cm_utils.h index a7fafbaae..8a3440c7b 100644 --- a/src/WINNT/afsd/cm_utils.h +++ b/src/WINNT/afsd/cm_utils.h @@ -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 */ -- 2.39.5