summaryrefslogtreecommitdiffstats
path: root/databases/firebird/files/patch-src::common::classes::locks.h
blob: e2948dd4bbd29244d8a418ad9bbf43a9ed75c29d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
--- 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
OpenPOWER on IntegriCloud