|
7 | 7 | *
|
8 | 8 | *
|
9 | 9 | * IDENTIFICATION
|
10 |
| - * $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.50 1998/09/21 02:25:27 momjian Exp $ |
| 10 | + * $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.51 1998/10/01 01:53:50 tgl Exp $ |
11 | 11 | *
|
12 | 12 | *-------------------------------------------------------------------------
|
13 | 13 | */
|
@@ -243,16 +243,20 @@ tas(slock_t *s_lock)
|
243 | 243 | * HP-UX (PA-RISC)
|
244 | 244 | *
|
245 | 245 | * Note that slock_t on PA-RISC is a structure instead of char
|
246 |
| - * (seestorage/ipc.h). |
| 246 | + * (seeinclude/port/hpux.h). |
247 | 247 | *
|
248 | 248 | * a "set" slock_t has a single word cleared. a "clear" slock_t has
|
249 | 249 | * all words set to non-zero. tas() in tas.s
|
250 | 250 | */
|
251 |
| -staticconstslock_tclear_lock= |
252 |
| -{{-1,-1,-1,-1}}; |
253 | 251 |
|
254 |
| -#defineS_UNLOCK(lock)(*(lock) = clear_lock)/* struct assignment */ |
| 252 | +#defineS_UNLOCK(lock) \ |
| 253 | +{ \ |
| 254 | +volatile slock_t *lock_ = (volatile slock_t *) (lock); \ |
| 255 | +lock_->sema[0] = lock_->sema[1] = lock_->sema[2] = lock_->sema[3] = -1; \ |
| 256 | +} |
| 257 | + |
255 | 258 | #defineS_LOCK_FREE(lock)( *(int *) (((long) (lock) + 15) & ~15) != 0)
|
| 259 | + |
256 | 260 | #endif/* __hpux */
|
257 | 261 |
|
258 | 262 |
|
@@ -322,9 +326,10 @@ static const slock_t clear_lock =
|
322 | 326 | externvoids_lock(volatileslock_t*lock,constchar*file,constintline);
|
323 | 327 |
|
324 | 328 | #defineS_LOCK(lock) \
|
325 |
| -if (TAS((volatile slock_t *) lock)) {\ |
326 |
| -s_lock((volatile slock_t *) lock, __FILE__, __LINE__); \ |
327 |
| -} else |
| 329 | +do { \ |
| 330 | +if (TAS((volatile slock_t *) lock)) \ |
| 331 | +s_lock((volatile slock_t *) lock, __FILE__, __LINE__); \ |
| 332 | +} while (0) |
328 | 333 | #endif/* S_LOCK */
|
329 | 334 |
|
330 | 335 | #if !defined(S_LOCK_FREE)
|
|