summaryrefslogtreecommitdiff
path: root/src/backend/storage/ipc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/storage/ipc.h')
-rw-r--r--src/backend/storage/ipc.h53
1 files changed, 32 insertions, 21 deletions
diff --git a/src/backend/storage/ipc.h b/src/backend/storage/ipc.h
index 36cb3c8f62..174e672e3d 100644
--- a/src/backend/storage/ipc.h
+++ b/src/backend/storage/ipc.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: ipc.h,v 1.2 1996/07/20 08:35:24 scrappy Exp $
+ * $Id: ipc.h,v 1.3 1996/07/22 22:59:43 scrappy Exp $
*
* NOTES
* This file is very architecture-specific. This stuff should actually
@@ -30,30 +30,22 @@
* atomic test-and-set instruction). However, we have only written
* spinlock code for the architectures listed.
*/
-#if (defined(PORTNAME_aix) || \
+#if defined(PORTNAME_aix) || \
defined(PORTNAME_alpha) || \
+ defined(PORTNAME_BSD44_derived) || \
+ defined(PORTNAME_bsdi) || \
defined(PORTNAME_hpux) || \
+ defined(PORTNAME_i386_solaris) || \
defined(PORTNAME_irix5) || \
+ defined(PORTNAME_linux) || \
defined(PORTNAME_next) || \
defined(PORTNAME_sparc) || \
- defined(PORTNAME_sparc_solaris) || \
- (defined(__i386__) && defined(__GNUC__))) && \
- !defined(PORTNAME_i386_solaris)
+ defined(PORTNAME_sparc_solaris)
#define HAS_TEST_AND_SET
#endif
#if defined(HAS_TEST_AND_SET)
-#if defined(PORTNAME_next)
-/*
- * Use Mach mutex routines since these are, in effect, test-and-set
- * spinlocks.
- */
-#undef NEVER /* definition in cthreads.h conflicts with parse.h */
-#include <mach/cthreads.h>
-
-typedef struct mutex slock_t;
-#else /* next */
#if defined(PORTNAME_aix)
/*
* The AIX C library has the cs(3) builtin for compare-and-set that
@@ -61,10 +53,12 @@ typedef struct mutex slock_t;
*/
typedef unsigned int slock_t;
#else /* aix */
+
#if defined(PORTNAME_alpha)
#include <sys/mman.h>
typedef msemaphore slock_t;
#else /* alpha */
+
#if defined(PORTNAME_hpux)
/*
* The PA-RISC "semaphore" for the LDWCX instruction is 4 bytes aligned
@@ -72,29 +66,45 @@ typedef msemaphore slock_t;
*/
typedef struct { int sem[4]; } slock_t;
#else /* hpux */
+
#if defined(PORTNAME_irix5)
#include <abi_mutex.h>
typedef abilock_t slock_t;
#else /* irix5 */
+
+#if defined(PORTNAME_next)
+/*
+ * Use Mach mutex routines since these are, in effect, test-and-set
+ * spinlocks.
+ */
+#undef NEVER /* definition in cthreads.h conflicts with parse.h */
+#include <mach/cthreads.h>
+typedef struct mutex slock_t;
+#else /* next */
+
/*
* On all other architectures spinlocks are a single byte.
*/
typedef unsigned char slock_t;
+
+#endif /* next */
#endif /* irix5 */
#endif /* hpux */
#endif /* alpha */
#endif /* aix */
-#endif /* next */
extern void S_LOCK(slock_t *lock);
extern void S_UNLOCK(slock_t *lock);
extern void S_INIT_LOCK(slock_t *lock);
-#if defined(PORTNAME_hpux) || defined(PORTNAME_alpha) || defined(PORTNAME_irix5) || defined(PORTNAME_next)
+#if defined(PORTNAME_alpha) || \
+ defined(PORTNAME_hpux) || \
+ defined(PORTNAME_irix5) || \
+ defined(PORTNAME_next)
extern int S_LOCK_FREE(slock_t *lock);
-#else /* PORTNAME_hpux */
+#else
#define S_LOCK_FREE(lock) ((*lock) == 0)
-#endif /* PORTNAME_hpux */
+#endif
#endif /* HAS_TEST_AND_SET */
@@ -108,9 +118,10 @@ extern int S_LOCK_FREE(slock_t *lock);
defined(PORTNAME_aix) || \
defined(PORTNAME_alpha) || \
defined(PORTNAME_hpux) || \
+ defined(PORTNAME_i386_solaris) || \
defined(PORTNAME_sparc_solaris) || \
- defined(WIN32) || \
- defined(PORTNAME_ultrix4)
+ defined(PORTNAME_ultrix4) || \
+ defined(WIN32)
union semun {
int val;
struct semid_ds *buf;