aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/port/hpux.h2
-rw-r--r--src/include/storage/s_lock.h21
2 files changed, 14 insertions, 9 deletions
diff --git a/src/include/port/hpux.h b/src/include/port/hpux.h
index d1a6451836f..b9c0c7564eb 100644
--- a/src/include/port/hpux.h
+++ b/src/include/port/hpux.h
@@ -9,7 +9,7 @@
#define HAS_TEST_AND_SET
typedef struct
{
- int sem[4];
+ int sema[4];
} slock_t;
#ifndef BIG_ENDIAN
diff --git a/src/include/storage/s_lock.h b/src/include/storage/s_lock.h
index d3f9d6d9b2f..eb9a808f099 100644
--- a/src/include/storage/s_lock.h
+++ b/src/include/storage/s_lock.h
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.50 1998/09/21 02:25:27 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.51 1998/10/01 01:53:50 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -243,16 +243,20 @@ tas(slock_t *s_lock)
* HP-UX (PA-RISC)
*
* Note that slock_t on PA-RISC is a structure instead of char
- * (see storage/ipc.h).
+ * (see include/port/hpux.h).
*
* a "set" slock_t has a single word cleared. a "clear" slock_t has
* all words set to non-zero. tas() in tas.s
*/
-static const slock_t clear_lock =
-{{-1, -1, -1, -1}};
-#define S_UNLOCK(lock) (*(lock) = clear_lock) /* struct assignment */
+#define S_UNLOCK(lock) \
+{ \
+ volatile slock_t *lock_ = (volatile slock_t *) (lock); \
+ lock_->sema[0] = lock_->sema[1] = lock_->sema[2] = lock_->sema[3] = -1; \
+}
+
#define S_LOCK_FREE(lock) ( *(int *) (((long) (lock) + 15) & ~15) != 0)
+
#endif /* __hpux */
@@ -322,9 +326,10 @@ static const slock_t clear_lock =
extern void s_lock(volatile slock_t *lock, const char *file, const int line);
#define S_LOCK(lock) \
- if (TAS((volatile slock_t *) lock)) {\
- s_lock((volatile slock_t *) lock, __FILE__, __LINE__); \
- } else
+ do { \
+ if (TAS((volatile slock_t *) lock)) \
+ s_lock((volatile slock_t *) lock, __FILE__, __LINE__); \
+ } while (0)
#endif /* S_LOCK */
#if !defined(S_LOCK_FREE)