035_debugging.patch
text/x-patch
Filename: 035_debugging.patch
Type: text/x-patch
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/storage/ipc/procarray.c | 5 | 0 |
| src/backend/tcop/postgres.c | 5 | 2 |
diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c
index 406b8253f8b..5e6b4ebbc2b 100644
--- a/src/backend/storage/ipc/procarray.c
+++ b/src/backend/storage/ipc/procarray.c
@@ -710,6 +710,7 @@ ProcArrayEndTransaction(PGPROC *proc, TransactionId latestXid)
/* be sure this is cleared in abort */
proc->delayChkptFlags = 0;
+fprintf(stderr, "!!!ProcArrayEndTransaction| pendingRecoveryConflicts = 0\n", getpid());
pg_atomic_write_u32(&proc->pendingRecoveryConflicts, 0);
/* must be cleared with xid/xmin: */
@@ -752,6 +753,8 @@ ProcArrayEndTransactionInternal(PGPROC *proc, TransactionId latestXid)
/* be sure this is cleared in abort */
proc->delayChkptFlags = 0;
+
+fprintf(stderr, "!!!ProcArrayEndTransactionInternal| pendingRecoveryConflicts = 0\n", getpid());
pg_atomic_write_u32(&proc->pendingRecoveryConflicts, 0);
/* must be cleared with xid/xmin: */
@@ -935,6 +938,7 @@ ProcArrayClearTransaction(PGPROC *proc)
proc->vxid.lxid = InvalidLocalTransactionId;
proc->xmin = InvalidTransactionId;
+fprintf(stderr, "!!!ProcArrayClearTransaction| pendingRecoveryConflicts = 0\n", getpid());
pg_atomic_write_u32(&proc->pendingRecoveryConflicts, 0);
Assert(!(proc->statusFlags & PROC_VACUUM_STATE_MASK));
@@ -3460,6 +3464,7 @@ SignalRecoveryConflict(PGPROC *proc, pid_t pid, RecoveryConflictReason reason)
{
bool found = false;
+fprintf(stderr, "!!!SignalRecoveryConflict[%d]\n", getpid());
LWLockAcquire(ProcArrayLock, LW_SHARED);
/*
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index d01a09dd0c4..ce499149789 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -3295,7 +3295,7 @@ ProcessRecoveryConflictInterrupts(void)
*/
Assert(!proc_exit_inprogress);
Assert(InterruptHoldoffCount == 0);
-
+fprintf(stderr, "!!!ProcessRecoveryConflictInterrupts[%d]\n", getpid());
/* Are any recovery conflict pending? */
pending = pg_atomic_read_membarrier_u32(&MyProc->pendingRecoveryConflicts);
if (pending == 0)
@@ -3313,6 +3313,7 @@ ProcessRecoveryConflictInterrupts(void)
{
if ((pending & (1 << reason)) != 0)
{
+fprintf(stderr, "!!!ProcessRecoveryConflictInterrupts[%d] pending: %d, reason: %d\n", getpid(), pending, reason);
/* clear the flag */
(void) pg_atomic_fetch_and_u32(&MyProc->pendingRecoveryConflicts, ~(1 << reason));
@@ -3506,7 +3507,9 @@ ProcessInterrupts(void)
}
}
- if (pg_atomic_read_u32(&MyProc->pendingRecoveryConflicts) != 0)
+int prc = pg_atomic_read_u32(&MyProc->pendingRecoveryConflicts);
+fprintf(stderr, "!!!ProcessInterrupts[%d]| MyProc->pendingRecoveryConflicts: %d\n", getpid(), prc);
+ if (prc != 0)
ProcessRecoveryConflictInterrupts();
if (IdleInTransactionSessionTimeoutPending)