X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fio-layer%2Fcritical-sections.c;h=d9ba58bd859b9cf27b54931dd8a1ae72dcd371ac;hb=ce6acbe4db3caca1d54f08f9758a88a7768ff236;hp=ba1a331ea347173f9ab0676b254d98c8046f1ed0;hpb=9869ae24b88761ab261c4311e24f7383b4af3f02;p=mono.git diff --git a/mono/io-layer/critical-sections.c b/mono/io-layer/critical-sections.c index ba1a331ea34..d9ba58bd859 100644 --- a/mono/io-layer/critical-sections.c +++ b/mono/io-layer/critical-sections.c @@ -10,36 +10,17 @@ #include #include #include +#include -#include "mono/io-layer/wapi.h" +#include +#include -#include "mono-mutex.h" - -#undef DEBUG +#include /* A critical section is really just like a lightweight mutex. It * can't be waited for, and doesn't have a handle. */ -/* According to the MSDN docs, the Microsoft implementation spins a - * number of times then waits for a semaphore. I could implement that - * here but I'd need a mutex around the critical section structure - * anyway. So I may as well just use a pthread mutex. - */ -static mono_once_t attr_key_once=MONO_ONCE_INIT; -static mono_mutexattr_t attr; - -static void attr_init(void) -{ - int ret; - - ret = mono_mutexattr_init(&attr); - g_assert (ret == 0); - - ret = mono_mutexattr_settype(&attr, MONO_MUTEX_RECURSIVE); - g_assert (ret == 0); -} - /** * InitializeCriticalSection: * @section: The critical section to initialise @@ -50,8 +31,7 @@ void InitializeCriticalSection(WapiCriticalSection *section) { int ret; - mono_once(&attr_key_once, attr_init); - ret = mono_mutex_init(§ion->mutex, &attr); + ret = mono_mutex_init_recursive (§ion->mutex); g_assert (ret == 0); } @@ -86,7 +66,8 @@ void DeleteCriticalSection(WapiCriticalSection *section) int ret; ret = mono_mutex_destroy(§ion->mutex); - g_assert (ret == 0); + if (ret) + g_error ("Failed to destroy mutex %p error code %d errno %d", §ion->mutex, ret, errno); } /**