diff options
Diffstat (limited to 'src/include/storage')
| -rw-r--r-- | src/include/storage/s_lock.h | 21 | 
1 files changed, 13 insertions, 8 deletions
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)  | 
