Imported Upstream version 2.6.4
[platform/upstream/harfbuzz.git] / src / hb-mutex.hh
index 35f1fde..e7f8b1c 100644 (file)
 /* Defined externally, i.e. in config.h; must have typedef'ed hb_mutex_impl_t as well. */
 
 
+#elif !defined(HB_NO_MT) && (defined(HAVE_PTHREAD) || defined(__APPLE__))
+
+#include <pthread.h>
+typedef pthread_mutex_t hb_mutex_impl_t;
+#define HB_MUTEX_IMPL_INIT     PTHREAD_MUTEX_INITIALIZER
+#define hb_mutex_impl_init(M)  pthread_mutex_init (M, nullptr)
+#define hb_mutex_impl_lock(M)  pthread_mutex_lock (M)
+#define hb_mutex_impl_unlock(M)        pthread_mutex_unlock (M)
+#define hb_mutex_impl_finish(M)        pthread_mutex_destroy (M)
+
+
 #elif !defined(HB_NO_MT) && defined(_WIN32)
 
 #include <windows.h>
@@ -63,17 +74,6 @@ typedef CRITICAL_SECTION hb_mutex_impl_t;
 #define hb_mutex_impl_finish(M)        DeleteCriticalSection (M)
 
 
-#elif !defined(HB_NO_MT) && (defined(HAVE_PTHREAD) || defined(__APPLE__))
-
-#include <pthread.h>
-typedef pthread_mutex_t hb_mutex_impl_t;
-#define HB_MUTEX_IMPL_INIT     PTHREAD_MUTEX_INITIALIZER
-#define hb_mutex_impl_init(M)  pthread_mutex_init (M, nullptr)
-#define hb_mutex_impl_lock(M)  pthread_mutex_lock (M)
-#define hb_mutex_impl_unlock(M)        pthread_mutex_unlock (M)
-#define hb_mutex_impl_finish(M)        pthread_mutex_destroy (M)
-
-
 #elif !defined(HB_NO_MT) && defined(HAVE_INTEL_ATOMIC_PRIMITIVES)
 
 #if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_YIELD)
@@ -92,25 +92,7 @@ typedef volatile int hb_mutex_impl_t;
 #define hb_mutex_impl_finish(M)        HB_STMT_START {} HB_STMT_END
 
 
-#elif !defined(HB_NO_MT)
-
-#if defined(HAVE_SCHED_H) && defined(HAVE_SCHED_YIELD)
-# include <sched.h>
-# define HB_SCHED_YIELD() sched_yield ()
-#else
-# define HB_SCHED_YIELD() HB_STMT_START {} HB_STMT_END
-#endif
-
-#define HB_MUTEX_INT_NIL 1 /* Warn that fallback implementation is in use. */
-typedef volatile int hb_mutex_impl_t;
-#define HB_MUTEX_IMPL_INIT     0
-#define hb_mutex_impl_init(M)  *(M) = 0
-#define hb_mutex_impl_lock(M)  HB_STMT_START { while (*(M)) HB_SCHED_YIELD (); (*(M))++; } HB_STMT_END
-#define hb_mutex_impl_unlock(M)        (*(M))--;
-#define hb_mutex_impl_finish(M)        HB_STMT_START {} HB_STMT_END
-
-
-#else /* HB_NO_MT */
+#elif defined(HB_NO_MT)
 
 typedef int hb_mutex_impl_t;
 #define HB_MUTEX_IMPL_INIT     0
@@ -120,6 +102,11 @@ typedef int hb_mutex_impl_t;
 #define hb_mutex_impl_finish(M)        HB_STMT_START {} HB_STMT_END
 
 
+#else
+
+#error "Could not find any system to define mutex macros."
+#error "Check hb-mutex.hh for possible resolutions."
+
 #endif
 
 
@@ -127,8 +114,6 @@ typedef int hb_mutex_impl_t;
 
 struct hb_mutex_t
 {
-  /* TODO Add tracing. */
-
   hb_mutex_impl_t m;
 
   void init   () { hb_mutex_impl_init   (&m); }