#endif /* _WIN32 */
-#if (!defined(_WIN32) || (defined(_WIN32) && !defined(_M_AMD64) && (_WIN32_WINNT < 0x0502)))
+#if (!defined(_WIN32) || (defined(_WIN32) && (_WIN32_WINNT < 0x0502) && !defined(InterlockedCompareExchange64)))
#define WINPR_INTERLOCKED_COMPARE_EXCHANGE64 1
#endif
/* Synchronization Barrier */
-#if (!defined(_WIN32)) || (defined(_WIN32) && (_WIN32_WINNT < 0x0602))
+#if (!defined(_WIN32)) || (defined(_WIN32) && (_WIN32_WINNT < 0x0602) && !defined(_SYNCHAPI_H_))
+#define WINPR_SYNCHRONIZATION_BARRIER 1
+#endif
+
+#ifdef WINPR_SYNCHRONIZATION_BARRIER
typedef struct _RTL_BARRIER
{
WINPR_API BOOL WINAPI DeleteSynchronizationBarrier(LPSYNCHRONIZATION_BARRIER lpBarrier);
#endif
+
/* Extended API */
WINPR_API VOID USleep(DWORD dwMicroseconds);
#include <winpr/crt.h>
-#if (!defined(_WIN32)) || (defined(_WIN32) && (_WIN32_WINNT < 0x0602))
+#ifdef WINPR_SYNCHRONIZATION_BARRIER
#include <winpr/library.h>
#include <winpr/interlocked.h>