X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fio-layer%2Fcritical-sections.c;h=3d2700da962f6a84d8ee34c964fcfe2a92c8ac64;hb=4ed099748e56bb2eb3660ac6f45f7c8fe8f6b9fe;hp=e8b2f220ff7d45f605d18da0020e54531fb401d3;hpb=46ff807cf0ad15caccdf05cdd576c35b2e606e39;p=mono.git diff --git a/mono/io-layer/critical-sections.c b/mono/io-layer/critical-sections.c index e8b2f220ff7..3d2700da962 100644 --- a/mono/io-layer/critical-sections.c +++ b/mono/io-layer/critical-sections.c @@ -1,8 +1,20 @@ +/* + * critical-sections.c: Critical sections + * + * Author: + * Dick Porter (dick@ximian.com) + * + * (C) 2002 Ximian, Inc. + */ + #include #include #include -#include "mono/io-layer/wapi.h" +#include +#include + +#include "mono-mutex.h" #undef DEBUG @@ -15,13 +27,23 @@ * 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(§ion->mutex, &attr); + int ret; + + mono_once(&attr_key_once, attr_init); + ret = mono_mutex_init(§ion->mutex, &attr); + g_assert (ret == 0); } /** @@ -64,7 +89,10 @@ gboolean InitializeCriticalSectionAndSpinCount(WapiCriticalSection *section, */ void DeleteCriticalSection(WapiCriticalSection *section) { - pthread_mutex_destroy(§ion->mutex); + int ret; + + ret = mono_mutex_destroy(§ion->mutex); + g_assert (ret == 0); } /** @@ -102,7 +130,7 @@ gboolean TryEnterCriticalSection(WapiCriticalSection *section) { int ret; - ret=pthread_mutex_trylock(§ion->mutex); + ret=mono_mutex_trylock(§ion->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(§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); -} -