@@ -20,25 +20,20 @@ #include #import "runtime.h" #import "runtime-private.h" +#import "globals.h" +#define synchronized_locks objc_globals.synchronized_locks +#define synchronized_locks_lock objc_globals.synchronized_locks_lock + #ifdef OF_HAVE_THREADS # import "threading.h" -static struct lock_s { - id object; - int count; - of_rmutex_t rmutex; - struct lock_s *next; -} *locks = NULL; - -static of_mutex_t mutex; - OF_CONSTRUCTOR() { - if (!of_mutex_new(&mutex)) + if (!of_mutex_new(&synchronized_locks_lock)) OBJC_ERROR("Failed to create mutex!") } #endif int @@ -46,23 +41,23 @@ { if (object == nil) return 0; #ifdef OF_HAVE_THREADS - struct lock_s *lock; + struct synchronized_lock *lock; - if (!of_mutex_lock(&mutex)) + if (!of_mutex_lock(&synchronized_locks_lock)) OBJC_ERROR("Failed to lock mutex!"); /* Look if we already have a lock */ - for (lock = locks; lock != NULL; lock = lock->next) { + for (lock = synchronized_locks; lock != NULL; lock = lock->next) { if (lock->object != object) continue; lock->count++; - if (!of_mutex_unlock(&mutex)) + if (!of_mutex_unlock(&synchronized_locks_lock)) OBJC_ERROR("Failed to unlock mutex!"); if (!of_rmutex_lock(&lock->rmutex)) OBJC_ERROR("Failed to lock mutex!"); @@ -76,15 +71,15 @@ if (!of_rmutex_new(&lock->rmutex)) OBJC_ERROR("Failed to create mutex!"); lock->object = object; lock->count = 1; - lock->next = locks; + lock->next = synchronized_locks; - locks = lock; + synchronized_locks = lock; - if (!of_mutex_unlock(&mutex)) + if (!of_mutex_unlock(&synchronized_locks_lock)) OBJC_ERROR("Failed to unlock mutex!"); if (!of_rmutex_lock(&lock->rmutex)) OBJC_ERROR("Failed to lock mutex!"); #endif @@ -97,16 +92,16 @@ { if (object == nil) return 0; #ifdef OF_HAVE_THREADS - struct lock_s *lock, *last = NULL; + struct synchronized_lock *lock, *last = NULL; - if (!of_mutex_lock(&mutex)) + if (!of_mutex_lock(&synchronized_locks_lock)) OBJC_ERROR("Failed to lock mutex!"); - for (lock = locks; lock != NULL; lock = lock->next) { + for (lock = synchronized_locks; lock != NULL; lock = lock->next) { if (lock->object != object) { last = lock; continue; } @@ -117,17 +112,17 @@ if (!of_rmutex_free(&lock->rmutex)) OBJC_ERROR("Failed to destroy mutex!"); if (last != NULL) last->next = lock->next; - if (locks == lock) - locks = lock->next; + if (synchronized_locks == lock) + synchronized_locks = lock->next; free(lock); } - if (!of_mutex_unlock(&mutex)) + if (!of_mutex_unlock(&synchronized_locks_lock)) OBJC_ERROR("Failed to unlock mutex!"); return 0; }