ssi-nocast-1.patch
application/octet-stream
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: context
| File | + | − |
|---|---|---|
| src/backend/storage/lmgr/predicate.c | 20 | 0 |
*** a/src/backend/storage/lmgr/predicate.c
--- b/src/backend/storage/lmgr/predicate.c
***************
*** 1436,1443 **** GetSafeSnapshot(Snapshot origSnapshot)
* them marked us as conflicted.
*/
MySerializableXact->flags |= SXACT_FLAG_DEFERRABLE_WAITING;
! while (!(SHMQueueEmpty((SHM_QUEUE *)
! &MySerializableXact->possibleUnsafeConflicts) ||
SxactIsROUnsafe(MySerializableXact)))
{
LWLockRelease(SerializableXactHashLock);
--- 1436,1442 ----
* them marked us as conflicted.
*/
MySerializableXact->flags |= SXACT_FLAG_DEFERRABLE_WAITING;
! while (!(SHMQueueEmpty(&MySerializableXact->possibleUnsafeConflicts) ||
SxactIsROUnsafe(MySerializableXact)))
{
LWLockRelease(SerializableXactHashLock);
***************
*** 3120,3132 **** ReleasePredicateLocks(const bool isCommit)
* opposed to 'outLink' for the r/w xacts.
*/
possibleUnsafeConflict = (RWConflict)
! SHMQueueNext((SHM_QUEUE *) &MySerializableXact->possibleUnsafeConflicts,
! (SHM_QUEUE *) &MySerializableXact->possibleUnsafeConflicts,
offsetof(RWConflictData, inLink));
while (possibleUnsafeConflict)
{
nextConflict = (RWConflict)
! SHMQueueNext((SHM_QUEUE *) &MySerializableXact->possibleUnsafeConflicts,
&possibleUnsafeConflict->inLink,
offsetof(RWConflictData, inLink));
--- 3119,3131 ----
* opposed to 'outLink' for the r/w xacts.
*/
possibleUnsafeConflict = (RWConflict)
! SHMQueueNext(&MySerializableXact->possibleUnsafeConflicts,
! &MySerializableXact->possibleUnsafeConflicts,
offsetof(RWConflictData, inLink));
while (possibleUnsafeConflict)
{
nextConflict = (RWConflict)
! SHMQueueNext(&MySerializableXact->possibleUnsafeConflicts,
&possibleUnsafeConflict->inLink,
offsetof(RWConflictData, inLink));
***************
*** 3159,3171 **** ReleasePredicateLocks(const bool isCommit)
* previously committed transactions.
*/
conflict = (RWConflict)
! SHMQueueNext((SHM_QUEUE *) &MySerializableXact->outConflicts,
! (SHM_QUEUE *) &MySerializableXact->outConflicts,
offsetof(RWConflictData, outLink));
while (conflict)
{
nextConflict = (RWConflict)
! SHMQueueNext((SHM_QUEUE *) &MySerializableXact->outConflicts,
&conflict->outLink,
offsetof(RWConflictData, outLink));
--- 3158,3170 ----
* previously committed transactions.
*/
conflict = (RWConflict)
! SHMQueueNext(&MySerializableXact->outConflicts,
! &MySerializableXact->outConflicts,
offsetof(RWConflictData, outLink));
while (conflict)
{
nextConflict = (RWConflict)
! SHMQueueNext(&MySerializableXact->outConflicts,
&conflict->outLink,
offsetof(RWConflictData, outLink));
***************
*** 3192,3204 **** ReleasePredicateLocks(const bool isCommit)
* we're rolling back, clear them all.
*/
conflict = (RWConflict)
! SHMQueueNext((SHM_QUEUE *) &MySerializableXact->inConflicts,
! (SHM_QUEUE *) &MySerializableXact->inConflicts,
offsetof(RWConflictData, inLink));
while (conflict)
{
nextConflict = (RWConflict)
! SHMQueueNext((SHM_QUEUE *) &MySerializableXact->inConflicts,
&conflict->inLink,
offsetof(RWConflictData, inLink));
--- 3191,3203 ----
* we're rolling back, clear them all.
*/
conflict = (RWConflict)
! SHMQueueNext(&MySerializableXact->inConflicts,
! &MySerializableXact->inConflicts,
offsetof(RWConflictData, inLink));
while (conflict)
{
nextConflict = (RWConflict)
! SHMQueueNext(&MySerializableXact->inConflicts,
&conflict->inLink,
offsetof(RWConflictData, inLink));
***************
*** 3219,3231 **** ReleasePredicateLocks(const bool isCommit)
* up if they are known safe or known unsafe.
*/
possibleUnsafeConflict = (RWConflict)
! SHMQueueNext((SHM_QUEUE *) &MySerializableXact->possibleUnsafeConflicts,
! (SHM_QUEUE *) &MySerializableXact->possibleUnsafeConflicts,
offsetof(RWConflictData, outLink));
while (possibleUnsafeConflict)
{
nextConflict = (RWConflict)
! SHMQueueNext((SHM_QUEUE *) &MySerializableXact->possibleUnsafeConflicts,
&possibleUnsafeConflict->outLink,
offsetof(RWConflictData, outLink));
--- 3218,3230 ----
* up if they are known safe or known unsafe.
*/
possibleUnsafeConflict = (RWConflict)
! SHMQueueNext(&MySerializableXact->possibleUnsafeConflicts,
! &MySerializableXact->possibleUnsafeConflicts,
offsetof(RWConflictData, outLink));
while (possibleUnsafeConflict)
{
nextConflict = (RWConflict)
! SHMQueueNext(&MySerializableXact->possibleUnsafeConflicts,
&possibleUnsafeConflict->outLink,
offsetof(RWConflictData, outLink));
***************
*** 3296,3302 **** ReleasePredicateLocks(const bool isCommit)
/* Add this to the list of transactions to check for later cleanup. */
if (isCommit)
SHMQueueInsertBefore(FinishedSerializableTransactions,
! (SHM_QUEUE *) &(MySerializableXact->finishedLink));
if (!isCommit)
ReleaseOneSerializableXact(MySerializableXact, false, false);
--- 3295,3301 ----
/* Add this to the list of transactions to check for later cleanup. */
if (isCommit)
SHMQueueInsertBefore(FinishedSerializableTransactions,
! &MySerializableXact->finishedLink);
if (!isCommit)
ReleaseOneSerializableXact(MySerializableXact, false, false);
***************
*** 3796,3802 **** CheckForSerializableConflictOut(const bool visible, const Relation relation,
errhint("The transaction might succeed if retried.")));
if (SxactHasSummaryConflictIn(MySerializableXact)
! || !SHMQueueEmpty((SHM_QUEUE *) &MySerializableXact->inConflicts))
ereport(ERROR,
(errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
errmsg("could not serialize access due to read/write dependencies among transactions"),
--- 3795,3801 ----
errhint("The transaction might succeed if retried.")));
if (SxactHasSummaryConflictIn(MySerializableXact)
! || !SHMQueueEmpty(&MySerializableXact->inConflicts))
ereport(ERROR,
(errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
errmsg("could not serialize access due to read/write dependencies among transactions"),
***************
*** 4469,4476 **** PreCommit_CheckForSerializationFailure(void)
}
nearConflict = (RWConflict)
! SHMQueueNext((SHM_QUEUE *) &MySerializableXact->inConflicts,
! (SHM_QUEUE *) &MySerializableXact->inConflicts,
offsetof(RWConflictData, inLink));
while (nearConflict)
{
--- 4468,4475 ----
}
nearConflict = (RWConflict)
! SHMQueueNext(&MySerializableXact->inConflicts,
! &MySerializableXact->inConflicts,
offsetof(RWConflictData, inLink));
while (nearConflict)
{
***************
*** 4503,4509 **** PreCommit_CheckForSerializationFailure(void)
}
nearConflict = (RWConflict)
! SHMQueueNext((SHM_QUEUE *) &MySerializableXact->inConflicts,
&nearConflict->inLink,
offsetof(RWConflictData, inLink));
}
--- 4502,4508 ----
}
nearConflict = (RWConflict)
! SHMQueueNext(&MySerializableXact->inConflicts,
&nearConflict->inLink,
offsetof(RWConflictData, inLink));
}
***************
*** 4550,4558 **** AtPrepare_PredicateLocks(void)
* outConflicts lists, if they're non-empty we'll represent that by
* setting the appropriate summary conflict flags.
*/
! if (!SHMQueueEmpty((SHM_QUEUE *) &MySerializableXact->inConflicts))
xactRecord->flags |= SXACT_FLAG_SUMMARY_CONFLICT_IN;
! if (!SHMQueueEmpty((SHM_QUEUE *) &MySerializableXact->outConflicts))
xactRecord->flags |= SXACT_FLAG_SUMMARY_CONFLICT_OUT;
RegisterTwoPhaseRecord(TWOPHASE_RM_PREDICATELOCK_ID, 0,
--- 4549,4557 ----
* outConflicts lists, if they're non-empty we'll represent that by
* setting the appropriate summary conflict flags.
*/
! if (!SHMQueueEmpty(&MySerializableXact->inConflicts))
xactRecord->flags |= SXACT_FLAG_SUMMARY_CONFLICT_IN;
! if (!SHMQueueEmpty(&MySerializableXact->outConflicts))
xactRecord->flags |= SXACT_FLAG_SUMMARY_CONFLICT_OUT;
RegisterTwoPhaseRecord(TWOPHASE_RM_PREDICATELOCK_ID, 0,