summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2011-02-10 12:00:53 +0200
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2011-02-10 12:03:21 +0200
commitcecb5901b8bb8b9eba140cda96e0d9a83607e6fa (patch)
treebeedb870c61e6bc48107a9281bd8a96a5be49ed4 /src
parent2ad0348677aebe36260b30fee22892e6519ee7d8 (diff)
Allocate all entries in the serializable xid hash up-front, so that you don't
run out of shared memory when you try to assign an xid to a transaction. Kevin Grittner
Diffstat (limited to 'src')
-rw-r--r--src/backend/storage/lmgr/predicate.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c
index 722d0f86be4..0fdceb255dd 100644
--- a/src/backend/storage/lmgr/predicate.c
+++ b/src/backend/storage/lmgr/predicate.c
@@ -1018,7 +1018,6 @@ InitPredicateLocks(void)
* PredicateLockShmemSize!
*/
max_table_size = (MaxBackends + max_prepared_xacts);
- init_table_size = max_table_size / 2;
/*
* Allocate a list to hold information on transactions participating in
@@ -1029,7 +1028,6 @@ InitPredicateLocks(void)
* be summarized for storage in SLRU and the "dummy" transaction.
*/
max_table_size *= 10;
- init_table_size *= 10;
PredXact = ShmemInitStruct("PredXactList",
PredXactListDataSize,
@@ -1092,7 +1090,7 @@ InitPredicateLocks(void)
hash_flags = (HASH_ELEM | HASH_FUNCTION);
SerializableXidHash = ShmemInitHash("SERIALIZABLEXID hash",
- init_table_size,
+ max_table_size,
max_table_size,
&info,
hash_flags);
@@ -1595,10 +1593,10 @@ RegisterPredicateLockingXid(const TransactionId xid)
&sxidtag,
HASH_ENTER, &found);
if (!sxid)
+ /* This should not be possible, based on allocation. */
ereport(ERROR,
(errcode(ERRCODE_OUT_OF_MEMORY),
- errmsg("out of shared memory"),
- errhint("You might need to increase max_predicate_locks_per_transaction.")));
+ errmsg("out of shared memory")));
Assert(!found);