OrcCodeRegion *region;
OrcCodeChunk *chunk;
+ orc_global_mutex_lock ();
for(i=0;i<orc_code_n_regions;i++){
region = orc_code_regions[i];
for(chunk = region->chunks; chunk; chunk = chunk->next) {
if (!chunk->used && size <= chunk->size) {
+ orc_global_mutex_unlock ();
return chunk;
}
}
for(chunk = region->chunks; chunk; chunk = chunk->next) {
if (!chunk->used && size <= chunk->size){
+ orc_global_mutex_unlock ();
return chunk;
}
}
+ orc_global_mutex_unlock ();
ORC_ASSERT(0);
#include <pthread.h>
static pthread_mutex_t once_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t global_mutex = PTHREAD_MUTEX_INITIALIZER;
void
orc_once_mutex_lock (void)
pthread_mutex_unlock (&once_mutex);
}
+void
+orc_global_mutex_lock (void)
+{
+ pthread_mutex_lock (&global_mutex);
+}
+
+void
+orc_global_mutex_unlock (void)
+{
+ pthread_mutex_unlock (&global_mutex);
+}
+
#elif defined(HAVE_THREAD_WIN32)
#include <windows.h>
static CRITICAL_SECTION once_mutex;
+static CRITICAL_SECTION global_mutex;
void
orc_once_mutex_lock (void)
LeaveCriticalSection (&once_mutex);
}
+void
+orc_global_mutex_lock (void)
+{
+ EnterCriticalSection (&global_mutex);
+}
+
+void
+orc_global_mutex_unlock (void)
+{
+ LeaveCriticalSection (&global_mutex);
+}
+
#ifdef _MSC_VER
#pragma section(".CRT$XCU",read)
orc_once_cs_init (void)
{
InitializeCriticalSection (&once_mutex);
+ InitializeCriticalSection (&global_mutex);
}
__declspec(allocate(".CRT$XCU"))
orc_once_cs_init (void)
{
InitializeCriticalSection (&once_mutex);
+ InitializeCriticalSection (&global_mutex);
}
#else
orc_int64 _strtoll (const char *nptr, char **endptr, int base);
+void orc_global_mutex_lock (void);
+void orc_global_mutex_unlock (void);
+
#endif
ORC_END_DECLS