2005-09-26 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mono / io-layer / critical-sections.c
index 029dda9ef9c2e519da685b824433e174ceffa267..457338839f1f40ef7e5d205a2ef76c16ff29177c 100644 (file)
@@ -1,10 +1,21 @@
+/*
+ * critical-sections.c:  Critical sections
+ *
+ * Author:
+ *     Dick Porter (dick@ximian.com)
+ *
+ * (C) 2002 Ximian, Inc.
+ */
+
 #include <config.h>
 #include <glib.h>
 #include <pthread.h>
 
 #include "mono/io-layer/wapi.h"
 
-#define DEBUG
+#include "mono-mutex.h"
+
+#undef DEBUG
 
 /* A critical section is really just like a lightweight mutex. It
  * can't be waited for, and doesn't have a handle.
  * here but I'd need a mutex around the critical section structure
  * anyway.  So I may as well just use a pthread mutex.
  */
-static pthread_once_t attr_key_once=PTHREAD_ONCE_INIT;
-static pthread_mutexattr_t attr;
+static mono_once_t attr_key_once=MONO_ONCE_INIT;
+static mono_mutexattr_t attr;
 
 static void attr_init(void)
 {
-       pthread_mutexattr_init(&attr);
-       pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+       int ret;
+       
+       ret = mono_mutexattr_init(&attr);
+       g_assert (ret == 0);
+       
+       ret = mono_mutexattr_settype(&attr, MONO_MUTEX_RECURSIVE);
+       g_assert (ret == 0);
 }
 
 /**
@@ -32,8 +48,11 @@ static void attr_init(void)
  */
 void InitializeCriticalSection(WapiCriticalSection *section)
 {
-       pthread_once(&attr_key_once, attr_init);
-       pthread_mutex_init(&section->mutex, &attr);
+       int ret;
+       
+       mono_once(&attr_key_once, attr_init);
+       ret = mono_mutex_init(&section->mutex, &attr);
+       g_assert (ret == 0);
 }
 
 /**
@@ -64,7 +83,10 @@ gboolean InitializeCriticalSectionAndSpinCount(WapiCriticalSection *section,
  */
 void DeleteCriticalSection(WapiCriticalSection *section)
 {
-       pthread_mutex_destroy(&section->mutex);
+       int ret;
+       
+       ret = mono_mutex_destroy(&section->mutex);
+       g_assert (ret == 0);
 }
 
 /**
@@ -102,7 +124,7 @@ gboolean TryEnterCriticalSection(WapiCriticalSection *section)
 {
        int ret;
        
-       ret=pthread_mutex_trylock(&section->mutex);
+       ret=mono_mutex_trylock(&section->mutex);
        if(ret==0) {
                return(TRUE);
        } else {
@@ -124,7 +146,12 @@ gboolean TryEnterCriticalSection(WapiCriticalSection *section)
  */
 void EnterCriticalSection(WapiCriticalSection *section)
 {
-       pthread_mutex_lock(&section->mutex);
+       int stat;
+
+       if ((stat = mono_mutex_lock(&section->mutex)) != 0) {
+               g_error ("%s: EnterCriticalSection failed: %s", __func__,
+                        g_strerror(stat));
+       }
 }
 
 /**
@@ -139,6 +166,9 @@ void EnterCriticalSection(WapiCriticalSection *section)
  */
 void LeaveCriticalSection(WapiCriticalSection *section)
 {
-       pthread_mutex_unlock(&section->mutex);
+       int ret;
+       
+       ret = mono_mutex_unlock(&section->mutex);
+       g_assert (ret == 0);
 }