LogicalRepApplyLoop(XLogRecPtr last_received)
{
TimestampTz last_recv_timestamp = GetCurrentTimestamp();
+ bool ping_sent = false;
/*
* Init the ApplyMessageContext which we clean up after each replication
/* mark as idle, before starting to loop */
pgstat_report_activity(STATE_IDLE, NULL);
+ /* This outer loop iterates once per wait. */
for (;;)
{
pgsocket fd = PGINVALID_SOCKET;
int len;
char *buf = NULL;
bool endofstream = false;
- bool ping_sent = false;
long wait_time;
CHECK_FOR_INTERRUPTS();
if (len != 0)
{
- /* Process the data */
+ /* Loop to process all available data (without blocking). */
for (;;)
{
CHECK_FOR_INTERRUPTS();
ereport(ERROR,
(errmsg("terminating logical replication worker due to timeout")));
- /*
- * We didn't receive anything new, for half of receiver
- * replication timeout. Ping the server.
- */
+ /* Check to see if it's time for a ping. */
if (!ping_sent)
{
timeout = TimestampTzPlusMilliseconds(last_recv_timestamp,