[sgen] Jobs for scanning from registered roots.
[mono.git] / mono / io-layer / critical-sections.h
index e377ce3c5a12d7ab74877777a9baf67635774fbd..6926e7687c7c518a0dfd5df9570a6b8a90bfa90c 100644 (file)
@@ -1,15 +1,28 @@
+/*
+ * critical-sections.h:  Critical sections
+ *
+ * Author:
+ *     Dick Porter (dick@ximian.com)
+ *
+ * (C) 2002 Ximian, Inc.
+ */
+
 #ifndef _WAPI_CRITICAL_SECTIONS_H_
 #define _WAPI_CRITICAL_SECTIONS_H_
 
 #include <glib.h>
 #include <pthread.h>
 
+#include "mono-mutex.h"
+
+G_BEGIN_DECLS
+
 typedef struct _WapiCriticalSection WapiCriticalSection;
 
 struct _WapiCriticalSection
 {
        guint32 depth;
-       pthread_mutex_t mutex;
+       mono_mutex_t mutex;
 };
 
 extern void InitializeCriticalSection(WapiCriticalSection *section);
@@ -17,7 +30,23 @@ extern gboolean InitializeCriticalSectionAndSpinCount(WapiCriticalSection *secti
 extern void DeleteCriticalSection(WapiCriticalSection *section);
 extern guint32 SetCriticalSectionSpinCount(WapiCriticalSection *section, guint32 spincount);
 extern gboolean TryEnterCriticalSection(WapiCriticalSection *section);
-extern void EnterCriticalSection(WapiCriticalSection *section);
-extern void LeaveCriticalSection(WapiCriticalSection *section);
+
+/* These two are perf critical so avoid the wrapper function */
+
+#define EnterCriticalSection(section) do { \
+       int ret = mono_mutex_lock(&(section)->mutex);    \
+       if (ret != 0) \
+               g_warning ("Bad call to mono_mutex_lock result %d", ret); \
+       g_assert (ret == 0);                             \
+} while (0)
+
+#define LeaveCriticalSection(section) do { \
+       int ret = mono_mutex_unlock(&(section)->mutex);      \
+       if (ret != 0) \
+               g_warning ("Bad call to mono_mutex_unlock result %d", ret); \
+       g_assert (ret == 0);    \
+} while (0)
+
+G_END_DECLS
 
 #endif /* _WAPI_CRITICAL_SECTIONS_H_ */