+/*
+ * 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);
}
/**
*/
void InitializeCriticalSection(WapiCriticalSection *section)
{
- pthread_once(&attr_key_once, attr_init);
- pthread_mutex_init(§ion->mutex, &attr);
+ int ret;
+
+ mono_once(&attr_key_once, attr_init);
+ ret = mono_mutex_init(§ion->mutex, &attr);
+ g_assert (ret == 0);
}
/**
*/
void DeleteCriticalSection(WapiCriticalSection *section)
{
- pthread_mutex_destroy(§ion->mutex);
+ int ret;
+
+ ret = mono_mutex_destroy(§ion->mutex);
+ g_assert (ret == 0);
}
/**
{
int ret;
- ret=pthread_mutex_trylock(§ion->mutex);
+ ret=mono_mutex_trylock(§ion->mutex);
if(ret==0) {
return(TRUE);
} else {
}
}
-/**
- * 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(§ion->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(§ion->mutex);
-}
-