diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 70d22577ce..c9b13062b0 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -475,6 +475,7 @@ MarkAsPreparingGuts(GlobalTransaction gxact, TransactionId xid, const char *gid, proc->lwWaitMode = 0; proc->waitLock = NULL; proc->waitProcLock = NULL; + pg_atomic_init_u64(&proc->waitStart, 0); for (i = 0; i < NUM_LOCK_PARTITIONS; i++) SHMQueueInit(&(proc->myProcLocks[i])); /* subxid data must be filled later by GXactLoadSubxactData */ @@ -873,15 +874,8 @@ PGPROC * TwoPhaseGetDummyProc(TransactionId xid, bool lock_held) { GlobalTransaction gxact = TwoPhaseGetGXact(xid, lock_held); - PGPROC *dummy = &ProcGlobal->allProcs[gxact->pgprocno]; - /* - * Initialize atomic variable in dummy proc so that GetLockStatusData() - * can read it later. - */ - pg_atomic_init_u64(&dummy->waitStart, 0); - - return dummy; + return &ProcGlobal->allProcs[gxact->pgprocno]; } /************************************************************************/ diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index 0884909a22..8e7d21456a 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -281,6 +281,7 @@ InitProcGlobal(void) */ pg_atomic_init_u32(&(procs[i].procArrayGroupNext), INVALID_PGPROCNO); pg_atomic_init_u32(&(procs[i].clogGroupNext), INVALID_PGPROCNO); + pg_atomic_init_u64(&(procs[i].waitStart), 0); } /* @@ -402,7 +403,7 @@ InitProcess(void) MyProc->lwWaitMode = 0; MyProc->waitLock = NULL; MyProc->waitProcLock = NULL; - pg_atomic_init_u64(&MyProc->waitStart, 0); + pg_atomic_write_u64(&MyProc->waitStart, 0); #ifdef USE_ASSERT_CHECKING { int i; @@ -581,7 +582,7 @@ InitAuxiliaryProcess(void) MyProc->lwWaitMode = 0; MyProc->waitLock = NULL; MyProc->waitProcLock = NULL; - pg_atomic_init_u64(&MyProc->waitStart, 0); + pg_atomic_write_u64(&MyProc->waitStart, 0); #ifdef USE_ASSERT_CHECKING { int i;