summaryrefslogtreecommitdiff
path: root/implement.h
diff options
context:
space:
mode:
Diffstat (limited to 'implement.h')
-rw-r--r--implement.h25
1 files changed, 19 insertions, 6 deletions
diff --git a/implement.h b/implement.h
index 82a7a8f..cf3c7f4 100644
--- a/implement.h
+++ b/implement.h
@@ -566,6 +566,7 @@ extern "C"
int ptw32_cond_check_need_init (pthread_cond_t * cond);
int ptw32_mutex_check_need_init (pthread_mutex_t * mutex);
int ptw32_rwlock_check_need_init (pthread_rwlock_t * rwlock);
+ int ptw32_spinlock_check_need_init (pthread_spinlock_t * spinlock);
PTW32_INTERLOCKED_LONG WINAPI
ptw32_InterlockedCompareExchange (PTW32_INTERLOCKED_LPLONG location,
@@ -658,7 +659,9 @@ extern "C"
# endif
# endif
#else
-# include <process.h>
+# ifndef WINCE
+# include <process.h>
+# endif
#endif
@@ -667,11 +670,21 @@ extern "C"
* See ptw32_InterlockedCompareExchange.c
*/
#ifndef PTW32_INTERLOCKED_COMPARE_EXCHANGE
-#ifdef _WIN64
-#define PTW32_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
-#else
-#define PTW32_INTERLOCKED_COMPARE_EXCHANGE ptw32_interlocked_compare_exchange
-#endif
+# ifdef _WIN64
+ /*
+ * InterlockedCompareExchange is an intrinsic function in Win64.
+ */
+# define PTW32_INTERLOCKED_COMPARE_EXCHANGE _InterlockedCompareExchange
+# else
+ /*
+ * The routine pthread_win32_process_attach_np() in pthread_win32_attach_detach_np.c
+ * checks at runtime that InterlockedCompareExchange is supported within
+ * KERNEL32.DLL (or COREDLL.DLL for WinCE). This allows the same
+ * dll to run on all Win32 versions from Win95 onwards. Not sure if this
+ * is required for WinCE, but should work just the same anyway.
+ */
+# define PTW32_INTERLOCKED_COMPARE_EXCHANGE ptw32_interlocked_compare_exchange
+# endif
#endif
#ifndef PTW32_INTERLOCKED_EXCHANGE