mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-12 19:27:47 +02:00
c715fdea26
IPC key assignment will now work correctly even when multiple postmasters are using same logical port number (which is possible given -k switch). There is only one shared-mem segment per postmaster now, not 3. Rip out broken code for non-TAS case in bufmgr and xlog, substitute a complete S_LOCK emulation using semaphores in spin.c. TAS and non-TAS logic is now exactly the same. When deadlock is detected, "Deadlock detected" is now the elog(ERROR) message, rather than a NOTICE that comes out before an unhelpful ERROR.
42 lines
928 B
C
42 lines
928 B
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* spin.h
|
|
* synchronization routines
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* $Id: spin.h,v 1.13 2000/11/28 23:27:57 tgl Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef SPIN_H
|
|
#define SPIN_H
|
|
|
|
#include "storage/ipc.h"
|
|
|
|
/*
|
|
* two implementations of spin locks
|
|
*
|
|
* Where TAS instruction is available: real spin locks.
|
|
* See src/storage/ipc/s_lock.c for details.
|
|
*
|
|
* Otherwise: fake spin locks using semaphores. see spin.c
|
|
*/
|
|
|
|
typedef int SPINLOCK;
|
|
|
|
#ifdef LOCK_DEBUG
|
|
extern bool Trace_spinlocks;
|
|
#endif
|
|
|
|
|
|
extern int SLockShmemSize(void);
|
|
extern void CreateSpinlocks(PGShmemHeader *seghdr);
|
|
|
|
extern void SpinAcquire(SPINLOCK lockid);
|
|
extern void SpinRelease(SPINLOCK lockid);
|
|
|
|
#endif /* SPIN_H */
|