Fix for netbsd locking, from Henry B. Hotz.

This commit is contained in:
Bruce Momjian 1997-10-30 05:24:19 +00:00
parent e2617c856e
commit 58ed1232f5
2 changed files with 42 additions and 3 deletions

View File

@ -1,15 +1,25 @@
#define USE_POSIX_TIME
#if defined(i386)
#define NEED_I386_TAS_ASM
#define HAS_TEST_AND_SET
#endif
#if defined(sparc)
#define NEED_SPARC_TAS_ASM
#define HAS_TEST_AND_SET
#endif
#if defined(ns32k)
#define NEED_NS32k_TAS_ASM
#endif
#define HAS_TEST_AND_SET
#endif
#if defined(__m68k__)
#define HAS_TEST_AND_SET
#endif
#if defined(__mips__)
/* # undef HAS_TEST_AND_SET */
/* # undef HAS_TEST_AND_SET */
#endif
typedef unsigned char slock_t;

View File

@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.10 1997/10/03 15:27:18 momjian Exp $
* $Header: /cvsroot/pgsql/src/include/storage/s_lock.h,v 1.11 1997/10/30 05:24:19 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@ -24,6 +24,10 @@
* ;
* }
*
* In addition to modifying this file you will need to modify
* the appropriate ...src/include/port/...h file to define
* HAS_TEST_AND_SET for the appropriate circumstances.
*
* If this is not done, POSTGRES will default to using System V
* semaphores (and take a large performance hit -- around 40% of
* its time on a DS5000/240 is spent in semop(3)...).
@ -228,6 +232,31 @@ tas_dummy()
#endif /* sun3 */
/*
* M68000 ports under NetBSD.
*
* This version should also work on a sun3, but I can't test it.
* Conversely the sun3 version should work under NetBSD/m68k, but
* it doesn't.
*/
#if defined(__NetBSD__) && defined(__m68k__)
static void S_LOCK(char *lock)
{
asm("
movel a6@(8),a0
LOOP:
tas a0@
bmi LOOP
");
}
#define S_UNLOCK(lock) (*(lock) = 0)
#define S_INIT_LOCK(lock) S_UNLOCK(lock)
#endif /* M68000 && NetBSD */
/*
* sparc machines
*/