inline void unlock();
};
+#else
+
+// Forward typedefs
+typedef struct Mutex Mutex;
+
#endif
// Includes.
-#include "vm/vm.hpp"
+#include "vm/os.hpp"
#ifdef __cplusplus
int result = pthread_mutexattr_init(&_attr);
if (result != 0) {
- vm_abort_errnum(result, "Mutex::Mutex(): pthread_mutexattr_init failed");
+ os::abort_errnum(result, "Mutex::Mutex(): pthread_mutexattr_init failed");
}
result = pthread_mutexattr_settype(&_attr, PTHREAD_MUTEX_RECURSIVE);
if (result != 0) {
- vm_abort_errnum(result, "Mutex::Mutex(): pthread_mutexattr_settype failed");
+ os::abort_errnum(result, "Mutex::Mutex(): pthread_mutexattr_settype failed");
}
result = pthread_mutex_init(&_mutex, &_attr);
if (result != 0) {
- vm_abort_errnum(result, "Mutex::Mutex(): pthread_mutex_init failed");
+ os::abort_errnum(result, "Mutex::Mutex(): pthread_mutex_init failed");
}
}
int result = pthread_mutexattr_destroy(&_attr);
if (result != 0) {
- vm_abort_errnum(result, "Mutex::~Mutex(): pthread_mutexattr_destroy failed");
+ os::abort_errnum(result, "Mutex::~Mutex(): pthread_mutexattr_destroy failed");
}
result = pthread_mutex_destroy(&_mutex);
if (result != 0) {
- vm_abort_errnum(result, "Mutex::~Mutex(): pthread_mutex_destroy failed");
+ os::abort_errnum(result, "Mutex::~Mutex(): pthread_mutex_destroy failed");
}
}
int result = pthread_mutex_lock(&_mutex);
if (result != 0) {
- vm_abort_errnum(result, "Mutex::lock(): pthread_mutex_lock failed");
+ os::abort_errnum(result, "Mutex::lock(): pthread_mutex_lock failed");
}
}
int result = pthread_mutex_unlock(&_mutex);
if (result != 0) {
- vm_abort_errnum(result, "Mutex::unlock: pthread_mutex_unlock failed");
+ os::abort_errnum(result, "Mutex::unlock: pthread_mutex_unlock failed");
}
}
#else
// This structure must have the same layout as the class above.
-typedef struct Mutex {
+struct Mutex {
pthread_mutex_t _mutex;
pthread_mutexattr_t _attr;
-} Mutex;
+};
Mutex* Mutex_new();
void Mutex_delete(Mutex* mutex);