diff options
Diffstat (limited to 'src/backend/access')
| -rw-r--r-- | src/backend/access/gin/ginentrypage.c | 2 | ||||
| -rw-r--r-- | src/backend/access/heap/heaptoast.c | 4 | ||||
| -rw-r--r-- | src/backend/access/heap/pruneheap.c | 28 | ||||
| -rw-r--r-- | src/backend/access/transam/multixact.c | 9 | ||||
| -rw-r--r-- | src/backend/access/transam/xlogwait.c | 2 |
5 files changed, 23 insertions, 22 deletions
diff --git a/src/backend/access/gin/ginentrypage.c b/src/backend/access/gin/ginentrypage.c index c0592367700..94f49d72a98 100644 --- a/src/backend/access/gin/ginentrypage.c +++ b/src/backend/access/gin/ginentrypage.c @@ -171,7 +171,7 @@ ginReadTuple(GinState *ginstate, OffsetNumber attnum, IndexTuple itup, { if (nipd > 0) { - ipd = ginPostingListDecode((GinPostingList *) ptr, &ndecoded); + ipd = ginPostingListDecode(ptr, &ndecoded); if (nipd != ndecoded) elog(ERROR, "number of items mismatch in GIN entry tuple, %d in tuple header, %d decoded", nipd, ndecoded); diff --git a/src/backend/access/heap/heaptoast.c b/src/backend/access/heap/heaptoast.c index e148c9be482..60e765fbfce 100644 --- a/src/backend/access/heap/heaptoast.c +++ b/src/backend/access/heap/heaptoast.c @@ -569,7 +569,7 @@ toast_build_flattened_tuple(TupleDesc tupleDesc, int num_to_free; int i; Datum new_values[MaxTupleAttributeNumber]; - Pointer freeable_values[MaxTupleAttributeNumber]; + void *freeable_values[MaxTupleAttributeNumber]; /* * We can pass the caller's isnull array directly to heap_form_tuple, but @@ -593,7 +593,7 @@ toast_build_flattened_tuple(TupleDesc tupleDesc, { new_value = detoast_external_attr(new_value); new_values[i] = PointerGetDatum(new_value); - freeable_values[num_to_free++] = (Pointer) new_value; + freeable_values[num_to_free++] = new_value; } } } diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index 5af84b4c875..ca44225a10e 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -158,8 +158,8 @@ typedef struct /* Local functions */ static void prune_freeze_setup(PruneFreezeParams *params, - TransactionId new_relfrozen_xid, - MultiXactId new_relmin_mxid, + TransactionId *new_relfrozen_xid, + MultiXactId *new_relmin_mxid, const PruneFreezeResult *presult, PruneState *prstate); static void prune_freeze_plan(Oid reloid, Buffer buffer, @@ -325,8 +325,8 @@ heap_page_prune_opt(Relation relation, Buffer buffer) */ static void prune_freeze_setup(PruneFreezeParams *params, - TransactionId new_relfrozen_xid, - MultiXactId new_relmin_mxid, + TransactionId *new_relfrozen_xid, + MultiXactId *new_relmin_mxid, const PruneFreezeResult *presult, PruneState *prstate) { @@ -362,15 +362,15 @@ prune_freeze_setup(PruneFreezeParams *params, prstate->pagefrz.freeze_required = false; if (prstate->attempt_freeze) { - prstate->pagefrz.FreezePageRelfrozenXid = new_relfrozen_xid; - prstate->pagefrz.NoFreezePageRelfrozenXid = new_relfrozen_xid; - prstate->pagefrz.FreezePageRelminMxid = new_relmin_mxid; - prstate->pagefrz.NoFreezePageRelminMxid = new_relmin_mxid; + Assert(new_relfrozen_xid && new_relmin_mxid); + prstate->pagefrz.FreezePageRelfrozenXid = *new_relfrozen_xid; + prstate->pagefrz.NoFreezePageRelfrozenXid = *new_relfrozen_xid; + prstate->pagefrz.FreezePageRelminMxid = *new_relmin_mxid; + prstate->pagefrz.NoFreezePageRelminMxid = *new_relmin_mxid; } else { - Assert(new_relfrozen_xid == InvalidTransactionId && - new_relmin_mxid == InvalidMultiXactId); + Assert(!new_relfrozen_xid && !new_relmin_mxid); prstate->pagefrz.FreezePageRelminMxid = InvalidMultiXactId; prstate->pagefrz.NoFreezePageRelminMxid = InvalidMultiXactId; prstate->pagefrz.FreezePageRelfrozenXid = InvalidTransactionId; @@ -823,12 +823,8 @@ heap_page_prune_and_freeze(PruneFreezeParams *params, /* Initialize prstate */ prune_freeze_setup(params, - new_relfrozen_xid ? - *new_relfrozen_xid : InvalidTransactionId, - new_relmin_mxid ? - *new_relmin_mxid : InvalidMultiXactId, - presult, - &prstate); + new_relfrozen_xid, new_relmin_mxid, + presult, &prstate); /* * Examine all line pointers and tuple visibility information to determine diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index 27f02faec80..8ed3fd9d071 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -909,6 +909,7 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset, int64 next_pageno; int next_entryno; MultiXactOffset *next_offptr; + MultiXactOffset next_offset; LWLock *lock; LWLock *prevlock = NULL; @@ -976,11 +977,15 @@ RecordNewMultiXact(MultiXactId multi, MultiXactOffset offset, next_offptr += next_entryno; } - if (*next_offptr != offset + nmembers) + /* Like in GetNewMultiXactId(), skip over offset 0 */ + next_offset = offset + nmembers; + if (next_offset == 0) + next_offset = 1; + if (*next_offptr != next_offset) { /* should already be set to the correct value, or not at all */ Assert(*next_offptr == 0); - *next_offptr = offset + nmembers; + *next_offptr = next_offset; MultiXactOffsetCtl->shared->page_dirty[slotno] = true; } diff --git a/src/backend/access/transam/xlogwait.c b/src/backend/access/transam/xlogwait.c index 98aa5f1e4a2..84613fc39c7 100644 --- a/src/backend/access/transam/xlogwait.c +++ b/src/backend/access/transam/xlogwait.c @@ -321,7 +321,7 @@ WaitForLSN(WaitLSNType lsnType, XLogRecPtr targetLSN, int64 timeout) Assert(waitLSNState); /* Should have a valid proc number */ - Assert(MyProcNumber >= 0 && MyProcNumber < MaxBackends); + Assert(MyProcNumber >= 0 && MyProcNumber < MaxBackends + NUM_AUXILIARY_PROCS); if (timeout > 0) { |
