]> granicus.if.org Git - postgresql/commitdiff
Make HP-PA S_UNLOCK a little faster and less dependent on unspecified compiler codege...
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 1 Oct 1998 01:53:50 +0000 (01:53 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 1 Oct 1998 01:53:50 +0000 (01:53 +0000)
Make default S_LOCK macro more robust against syntax mistakes.
(I cleared these changes with David Gould a few days ago.)

src/include/port/hpux.h
src/include/storage/s_lock.h

index d1a6451836fa3f3e4187a8dc95fb503f5426f870..b9c0c7564ebf83f48676b9db7af07577eb00a4a9 100644 (file)
@@ -9,7 +9,7 @@
 #define HAS_TEST_AND_SET
 typedef struct
 {
-       int                     sem[4];
+       int                     sema[4];
 } slock_t;
 
 #ifndef                        BIG_ENDIAN
index d3f9d6d9b2fa925ec6cadf562c07881e4a2654f6..eb9a808f099582b8a798aa60623ba6f01fc711cd 100644 (file)
@@ -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)