mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	Replace CAS loop with single TAS in ProcArrayGroupClearXid()
Single pg_atomic_exchange_u32() is expected to be faster than loop of pg_atomic_compare_exchange_u32(). Also, it would be consistent with clog group update code. Discussion: https://postgr.es/m/CAPpHfdtxLsC-bqfxFcHswZ91OxXcZVNDBBVfg9tAWU0jvn1tQA%40mail.gmail.com Reviewed-by: Amit Kapila
This commit is contained in:
		| @@ -542,14 +542,8 @@ ProcArrayGroupClearXid(PGPROC *proc, TransactionId latestXid) | ||||
| 	 * group XID clearing, saving a pointer to the head of the list.  Trying | ||||
| 	 * to pop elements one at a time could lead to an ABA problem. | ||||
| 	 */ | ||||
| 	while (true) | ||||
| 	{ | ||||
| 		nextidx = pg_atomic_read_u32(&procglobal->procArrayGroupFirst); | ||||
| 		if (pg_atomic_compare_exchange_u32(&procglobal->procArrayGroupFirst, | ||||
| 										   &nextidx, | ||||
| 										   INVALID_PGPROCNO)) | ||||
| 			break; | ||||
| 	} | ||||
| 	nextidx = pg_atomic_exchange_u32(&procglobal->procArrayGroupFirst, | ||||
| 									 INVALID_PGPROCNO); | ||||
|  | ||||
| 	/* Remember head of list so we can perform wakeups after dropping lock. */ | ||||
| 	wakeidx = nextidx; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user