diff --git a/src/include/port/hpux.h b/src/include/port/hpux.h
index d1a6451836fa3f3e4187a8dc95fb503f5426f870..b9c0c7564ebf83f48676b9db7af07577eb00a4a9 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 d3f9d6d9b2fa925ec6cadf562c07881e4a2654f6..eb9a808f099582b8a798aa60623ba6f01fc711cd 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)