2007-11-22 Dick Porter <dick@ximian.com>
[mono.git] / mono / io-layer / critical-sections.c
index e8b2f220ff7d45f605d18da0020e54531fb401d3..3d2700da962f6a84d8ee34c964fcfe2a92c8ac64 100644 (file)
@@ -1,8 +1,20 @@
+/*
+ * 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"
+#include <mono/io-layer/wapi.h>
+#include <mono/io-layer/critical-section-private.h>
+
+#include "mono-mutex.h"
 
 #undef DEBUG
 
  * 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);
+}
+
+void _wapi_critical_section_cleanup (void)
+{
+       mono_mutexattr_destroy (&attr);
 }
 
 /**
@@ -32,8 +54,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 +89,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 +130,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 {
@@ -110,35 +138,3 @@ gboolean TryEnterCriticalSection(WapiCriticalSection *section)
        }
 }
 
-/**
- * EnterCriticalSection:
- * @section: The critical section to enter
- *
- * Enters critical section @section, blocking while other threads own
- * it.  This function doesn't return until the calling thread assumes
- * ownership of @section.
- *
- * A thread can recursively call EnterCriticalSection() and
- * TryEnterCriticalSection(), but must call LeaveCriticalSection() an
- * equal number of times.
- */
-void EnterCriticalSection(WapiCriticalSection *section)
-{
-       pthread_mutex_lock(&section->mutex);
-}
-
-/**
- * LeaveCriticalSection:
- * @section: The critical section to leave
- *
- * Leaves critical section @section, relinquishing ownership.
- *
- * A thread can recursively call EnterCriticalSection() and
- * TryEnterCriticalSection(), but must call LeaveCriticalSection() an
- * equal number of times.
- */
-void LeaveCriticalSection(WapiCriticalSection *section)
-{
-       pthread_mutex_unlock(&section->mutex);
-}
-