mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	Fix the initialization of atomic variables introduced by the
group clearing mechanism. Commits0e141c0fbbandbaaf272ac9introduced initialization of atomic variables in InitProcess which means that it's not safe to look at those for backends that aren't currently in use. Fix that by initializing them during postmaster startup. Reported-by: Andres Freund Author: Amit Kapila Backpatch-through: 9.6 Discussion: https://postgr.es/m/20181027104138.qmbbelopvy7cw2qv@alap3.anarazel.de
This commit is contained in:
		| @@ -267,6 +267,13 @@ InitProcGlobal(void) | ||||
|  | ||||
| 		/* Initialize lockGroupMembers list. */ | ||||
| 		dlist_init(&procs[i].lockGroupMembers); | ||||
|  | ||||
| 		/* | ||||
| 		 * Initialize the atomic variables, otherwise, it won't be safe to | ||||
| 		 * access them for backends that aren't currently in use. | ||||
| 		 */ | ||||
| 		pg_atomic_init_u32(&(procs[i].procArrayGroupNext), INVALID_PGPROCNO); | ||||
| 		pg_atomic_init_u32(&(procs[i].clogGroupNext), INVALID_PGPROCNO); | ||||
| 	} | ||||
|  | ||||
| 	/* | ||||
| @@ -401,7 +408,7 @@ InitProcess(void) | ||||
| 	/* Initialize fields for group XID clearing. */ | ||||
| 	MyProc->procArrayGroupMember = false; | ||||
| 	MyProc->procArrayGroupMemberXid = InvalidTransactionId; | ||||
| 	pg_atomic_init_u32(&MyProc->procArrayGroupNext, INVALID_PGPROCNO); | ||||
| 	Assert(pg_atomic_read_u32(&MyProc->procArrayGroupNext) == INVALID_PGPROCNO); | ||||
|  | ||||
| 	/* Check that group locking fields are in a proper initial state. */ | ||||
| 	Assert(MyProc->lockGroupLeader == NULL); | ||||
| @@ -416,7 +423,7 @@ InitProcess(void) | ||||
| 	MyProc->clogGroupMemberXidStatus = TRANSACTION_STATUS_IN_PROGRESS; | ||||
| 	MyProc->clogGroupMemberPage = -1; | ||||
| 	MyProc->clogGroupMemberLsn = InvalidXLogRecPtr; | ||||
| 	pg_atomic_init_u32(&MyProc->clogGroupNext, INVALID_PGPROCNO); | ||||
| 	Assert(pg_atomic_read_u32(&MyProc->clogGroupNext) == INVALID_PGPROCNO); | ||||
|  | ||||
| 	/* | ||||
| 	 * Acquire ownership of the PGPROC's latch, so that we can use WaitLatch | ||||
|   | ||||
		Reference in New Issue
	
	Block a user