summaryrefslogtreecommitdiff
path: root/src/backend/access
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access')
-rw-r--r--src/backend/access/gin/ginentrypage.c2
-rw-r--r--src/backend/access/heap/heaptoast.c4
-rw-r--r--src/backend/access/heap/pruneheap.c28
-rw-r--r--src/backend/access/transam/multixact.c9
-rw-r--r--src/backend/access/transam/xlogwait.c2
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)
{