@ -160,24 +160,16 @@ SyncRepWaitForLSN(XLogRecPtr XactCommitLSN)
*/
*/
for ( ; ; )
for ( ; ; )
{
{
int syncRepState ;
/* Must reset the latch before testing state. */
/* Must reset the latch before testing state. */
ResetLatch ( MyLatch ) ;
ResetLatch ( MyLatch ) ;
/*
/*
* Try checking the state without the lock first . There ' s no
* Acquiring the lock is not needed , the latch ensures proper barriers .
* guarantee that we ' ll read the most up - to - date value , so if it looks
* If it looks like we ' re done , we must really be done , because once
* like we ' re still waiting , recheck while holding the lock . But if
* walsender changes the state to SYNC_REP_WAIT_COMPLETE , it will never
* it looks like we ' re done , we must really be done , because once
* update it again , so we can ' t be seeing a stale value in that case .
* walsender changes the state to SYNC_REP_WAIT_COMPLETE , it will
* never update it again , so we can ' t be seeing a stale value in that
* case .
*/
*/
syncRepState = MyProc - > syncRepState ;
if ( MyProc - > syncRepState = = SYNC_REP_WAIT_COMPLETE )
if ( syncRepState = = SYNC_REP_WAITING )
syncRepState = MyProc - > syncRepState ;
if ( syncRepState = = SYNC_REP_WAIT_COMPLETE )
break ;
break ;
/*
/*