wip-fix-for-error-during-CCI.patch
text/x-diff
Filename: wip-fix-for-error-during-CCI.patch
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/utils/cache/inval.c | 0 | 0 |
diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c
index f09e3a9..8894bdf 100644
*** a/src/backend/utils/cache/inval.c
--- b/src/backend/utils/cache/inval.c
*************** AddInvalidationMessage(InvalidationChunk
*** 264,287 ****
}
/*
! * Append one list of invalidation message chunks to another, resetting
! * the source chunk-list pointer to NULL.
*/
static void
AppendInvalidationMessageList(InvalidationChunk **destHdr,
InvalidationChunk **srcHdr)
{
! InvalidationChunk *chunk = *srcHdr;
! if (chunk == NULL)
return; /* nothing to do */
! while (chunk->next != NULL)
! chunk = chunk->next;
! chunk->next = *destHdr;
! *destHdr = *srcHdr;
*srcHdr = NULL;
}
--- 264,294 ----
}
/*
! * Append the "source" list of invalidation message chunks to the "dest"
! * list, resetting the source chunk-list pointer to NULL.
! * Note that if the caller hangs onto the previous source pointer,
! * the source list is still separately traversable afterwards.
*/
static void
AppendInvalidationMessageList(InvalidationChunk **destHdr,
InvalidationChunk **srcHdr)
{
! InvalidationChunk *chunk;
! if (*srcHdr == NULL)
return; /* nothing to do */
! chunk = *destHdr;
! if (chunk == NULL)
! *destHdr = *srcHdr;
! else
! {
! while (chunk->next != NULL)
! chunk = chunk->next;
! chunk->next = *srcHdr;
! }
*srcHdr = NULL;
}
*************** xactGetCommittedInvalidationMessages(Sha
*** 858,867 ****
*/
oldcontext = MemoryContextSwitchTo(CurTransactionContext);
- ProcessInvalidationMessagesMulti(&transInvalInfo->CurrentCmdInvalidMsgs,
- MakeSharedInvalidMessagesArray);
ProcessInvalidationMessagesMulti(&transInvalInfo->PriorCmdInvalidMsgs,
MakeSharedInvalidMessagesArray);
MemoryContextSwitchTo(oldcontext);
Assert(!(numSharedInvalidMessagesArray > 0 &&
--- 865,874 ----
*/
oldcontext = MemoryContextSwitchTo(CurTransactionContext);
ProcessInvalidationMessagesMulti(&transInvalInfo->PriorCmdInvalidMsgs,
MakeSharedInvalidMessagesArray);
+ ProcessInvalidationMessagesMulti(&transInvalInfo->CurrentCmdInvalidMsgs,
+ MakeSharedInvalidMessagesArray);
MemoryContextSwitchTo(oldcontext);
Assert(!(numSharedInvalidMessagesArray > 0 &&
*************** AtEOSubXact_Inval(bool isCommit)
*** 1084,1089 ****
--- 1091,1098 ----
void
CommandEndInvalidationMessages(void)
{
+ InvalidationListHeader currentCmdInvalidMsgs;
+
/*
* You might think this shouldn't be called outside any transaction, but
* bootstrap does it, and also ABORT issued when not in a transaction. So
*************** CommandEndInvalidationMessages(void)
*** 1092,1101 ****
if (transInvalInfo == NULL)
return;
! ProcessInvalidationMessages(&transInvalInfo->CurrentCmdInvalidMsgs,
! LocalExecuteInvalidationMessage);
AppendInvalidationMessages(&transInvalInfo->PriorCmdInvalidMsgs,
&transInvalInfo->CurrentCmdInvalidMsgs);
}
--- 1101,1113 ----
if (transInvalInfo == NULL)
return;
! currentCmdInvalidMsgs = transInvalInfo->CurrentCmdInvalidMsgs;
!
AppendInvalidationMessages(&transInvalInfo->PriorCmdInvalidMsgs,
&transInvalInfo->CurrentCmdInvalidMsgs);
+
+ ProcessInvalidationMessages(¤tCmdInvalidMsgs,
+ LocalExecuteInvalidationMessage);
}