mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-07 19:47:50 +08:00
Calculate # of semaphores correctly with --disable-spinlocks.
The old formula didn't take into account that each WAL sender process needs a spinlock. We had also already exceeded the fixed number of spinlocks reserved for misc purposes (10). Bump that to 30. Backpatch to 9.0, where WAL senders were introduced. If I counted correctly, 9.0 had exactly 10 predefined spinlocks, and 9.1 exceeded that, but bump the limit in 9.0 too because 10 is uncomfortably close to the edge.
This commit is contained in:
parent
f7b0006f42
commit
b8ed4cc962
@ -23,6 +23,7 @@
|
||||
#include "postgres.h"
|
||||
|
||||
#include "miscadmin.h"
|
||||
#include "replication/walsender.h"
|
||||
#include "storage/lwlock.h"
|
||||
#include "storage/spin.h"
|
||||
|
||||
@ -50,14 +51,21 @@ SpinlockSemas(void)
|
||||
int
|
||||
SpinlockSemas(void)
|
||||
{
|
||||
int nsemas;
|
||||
|
||||
/*
|
||||
* It would be cleaner to distribute this logic into the affected modules,
|
||||
* similar to the way shmem space estimation is handled.
|
||||
*
|
||||
* For now, though, we just need a few spinlocks (10 should be plenty)
|
||||
* plus one for each LWLock and one for each buffer header.
|
||||
* For now, though, there are few enough users of spinlocks that we just
|
||||
* keep the knowledge here.
|
||||
*/
|
||||
return NumLWLocks() + NBuffers + 10;
|
||||
nsemas = NumLWLocks(); /* one for each lwlock */
|
||||
nsemas += NBuffers; /* one for each buffer header */
|
||||
nsemas += max_wal_senders; /* one for each wal sender process */
|
||||
nsemas += 30; /* plus a bunch for other small-scale use */
|
||||
|
||||
return nsemas;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user