49 lines
1.1 KiB
C++
49 lines
1.1 KiB
C++
--- src/common/classes/locks.h.orig Sun Aug 17 14:56:47 2003
|
|
+++ src/common/classes/locks.h Wed Nov 12 11:12:25 2003
|
|
@@ -77,7 +77,7 @@
|
|
|
|
/* Process-local spinlock. Used to manage memory heaps in threaded environment. */
|
|
// Pthreads version of the class
|
|
-#ifndef SOLARIS
|
|
+#if !defined(SOLARIS) && !defined(DARWIN) && !defined(FREEBSD)
|
|
class Spinlock {
|
|
private:
|
|
pthread_spinlock_t spinlock;
|
|
@@ -100,6 +100,7 @@
|
|
}
|
|
};
|
|
#else
|
|
+#ifdef SOLARIS
|
|
// Who knows why Solaris 2.6 have not THIS funny spins?
|
|
//The next code is not comlpeted but let me compile //Konstantin
|
|
class Spinlock {
|
|
@@ -123,6 +124,29 @@
|
|
system_call_failed::raise();
|
|
}
|
|
};
|
|
+#else // DARWIN and FREEBSD
|
|
+class Spinlock {
|
|
+private:
|
|
+ pthread_mutex_t mlock;
|
|
+public:
|
|
+ Spinlock() {
|
|
+ if (pthread_mutex_init(&mlock, 0))
|
|
+ system_call_failed::raise();
|
|
+ }
|
|
+ ~Spinlock() {
|
|
+ if (pthread_mutex_destroy(&mlock))
|
|
+ system_call_failed::raise();
|
|
+ }
|
|
+ void enter() {
|
|
+ if (pthread_mutex_lock(&mlock))
|
|
+ system_call_failed::raise();
|
|
+ }
|
|
+ void leave() {
|
|
+ if (pthread_mutex_unlock(&mlock))
|
|
+ system_call_failed::raise();
|
|
+ }
|
|
+};
|
|
+#endif
|
|
|
|
#endif
|
|
#endif
|