@ -1428,8 +1428,10 @@ WalSndWaitForWal(XLogRecPtr loc)
/*
/*
* We only send regular messages to the client for full decoded
* We only send regular messages to the client for full decoded
* transactions , but a synchronous replication and walsender shutdown
* transactions , but a synchronous replication and walsender shutdown
* possibly are waiting for a later location . So we send pings
* possibly are waiting for a later location . So , before sleeping , we
* containing the flush location every now and then .
* send a ping containing the flush location . If the receiver is
* otherwise idle , this keepalive will trigger a reply . Processing the
* reply will update these MyWalSnd locations .
*/
*/
if ( MyWalSnd - > flush < sentPtr & &
if ( MyWalSnd - > flush < sentPtr & &
MyWalSnd - > write < sentPtr & &
MyWalSnd - > write < sentPtr & &
@ -2314,20 +2316,16 @@ WalSndLoop(WalSndSendDataCallback send_data)
WalSndKeepaliveIfNecessary ( ) ;
WalSndKeepaliveIfNecessary ( ) ;
/*
/*
* We don ' t block if not caught up , unless there is unsent data
* Block if we have unsent data . Let WalSndWaitForWal ( ) handle any
* pending in which case we ' d better block until the socket is
* other blocking ; idle receivers need its additional actions .
* write - ready . This test is only needed for the case where the
* send_data callback handled a subset of the available data but then
* pq_flush_if_writable flushed it all - - - we should immediately try
* to send more .
*/
*/
if ( ( WalSndCaughtUp & & ! streamingDoneSending ) | | pq_is_send_pending ( ) )
if ( pq_is_send_pending ( ) )
{
{
long sleeptime ;
long sleeptime ;
int wakeEvents ;
int wakeEvents ;
wakeEvents = WL_LATCH_SET | WL_EXIT_ON_PM_DEATH | WL_TIMEOUT |
wakeEvents = WL_LATCH_SET | WL_EXIT_ON_PM_DEATH | WL_TIMEOUT |
WL_SOCKET_READABLE ;
WL_SOCKET_READABLE | WL_SOCKET_WRITEABLE ;
/*
/*
* Use fresh timestamp , not last_processing , to reduce the chance
* Use fresh timestamp , not last_processing , to reduce the chance
@ -2335,9 +2333,6 @@ WalSndLoop(WalSndSendDataCallback send_data)
*/
*/
sleeptime = WalSndComputeSleeptime ( GetCurrentTimestamp ( ) ) ;
sleeptime = WalSndComputeSleeptime ( GetCurrentTimestamp ( ) ) ;
if ( pq_is_send_pending ( ) )
wakeEvents | = WL_SOCKET_WRITEABLE ;
/* Sleep until something happens or we time out */
/* Sleep until something happens or we time out */
( void ) WaitLatchOrSocket ( MyLatch , wakeEvents ,
( void ) WaitLatchOrSocket ( MyLatch , wakeEvents ,
MyProcPort - > sock , sleeptime ,
MyProcPort - > sock , sleeptime ,