Fix walsender handling of postmaster shutdown, to not go into endless loop.
authorHeikki Linnakangas
Mon, 8 Oct 2012 10:22:04 +0000 (13:22 +0300)
committerHeikki Linnakangas
Mon, 8 Oct 2012 10:32:14 +0000 (13:32 +0300)
This bug was introduced by my patch to use the regular die/quickdie signal
handlers in walsender processes. I tried to make walsender exit at next
CHECK_FOR_INTERRUPTS() by setting ProcDiePending, but that's not enough, you
need to set InterruptPending too. On second thoght, it was not a very good
way to make walsender exit anyway, so use proc_exit(0) instead.

Also, send a CommandComplete message before exiting; that's what we did
before, and you get a nicer error message in the standby that way.

Reported by Thom Brown.

src/backend/replication/walsender.c

index 0ba2ad4414062ead6c20c50cd6d5c84ba97b6086..9207a48910b3c2a8752ebbcb52ea460f09ebd730 100644 (file)
@@ -711,8 +711,11 @@ WalSndLoop(void)
                XLogSend(output_message, &caughtup);
                if (caughtup && !pq_is_send_pending())
                {
-                   ProcDiePending = true;
-                   continue;   /* don't want to wait more */
+                   /* Inform the standby that XLOG streaming is done */
+                   pq_puttextmessage('C', "COPY 0");
+                   pq_flush();
+
+                   proc_exit(0);
                }
            }
        }