Revert "Cannot use WL_SOCKET_WRITEABLE without WL_SOCKET_READABLE."
This reverts commit 3a9e64aa0d96c8ffb6c682b082d0f72b1d373327. Commit 4bad60e3 fixed the root of the problem that 3a9e64aa worked around. This enables proper pipelining of commands after terminating replication, eliminating an undocumented limitation. Discussion: https://postgr.es/m/3d57bc29-4459-578b-79cb-7641baf53c57%40iki.fi Backpatch-through: 9.5
This commit is contained in:
parent
970761f15f
commit
4ee058a3bd
@ -1603,7 +1603,12 @@ ProcessRepliesIfAny(void)
|
|||||||
|
|
||||||
last_processing = GetCurrentTimestamp();
|
last_processing = GetCurrentTimestamp();
|
||||||
|
|
||||||
for (;;)
|
/*
|
||||||
|
* If we already received a CopyDone from the frontend, any subsequent
|
||||||
|
* message is the beginning of a new command, and should be processed in
|
||||||
|
* the main processing loop.
|
||||||
|
*/
|
||||||
|
while (!streamingDoneReceiving)
|
||||||
{
|
{
|
||||||
pq_startmsgread();
|
pq_startmsgread();
|
||||||
r = pq_getbyte_if_available(&firstchar);
|
r = pq_getbyte_if_available(&firstchar);
|
||||||
@ -1632,19 +1637,6 @@ ProcessRepliesIfAny(void)
|
|||||||
proc_exit(0);
|
proc_exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* If we already received a CopyDone from the frontend, the frontend
|
|
||||||
* should not send us anything until we've closed our end of the COPY.
|
|
||||||
* XXX: In theory, the frontend could already send the next command
|
|
||||||
* before receiving the CopyDone, but libpq doesn't currently allow
|
|
||||||
* that.
|
|
||||||
*/
|
|
||||||
if (streamingDoneReceiving && firstchar != 'X')
|
|
||||||
ereport(FATAL,
|
|
||||||
(errcode(ERRCODE_PROTOCOL_VIOLATION),
|
|
||||||
errmsg("unexpected standby message type \"%c\", after receiving CopyDone",
|
|
||||||
firstchar)));
|
|
||||||
|
|
||||||
/* Handle the very limited subset of commands expected in this phase */
|
/* Handle the very limited subset of commands expected in this phase */
|
||||||
switch (firstchar)
|
switch (firstchar)
|
||||||
{
|
{
|
||||||
@ -2212,8 +2204,10 @@ WalSndLoop(WalSndSendDataCallback send_data)
|
|||||||
long sleeptime;
|
long sleeptime;
|
||||||
int wakeEvents;
|
int wakeEvents;
|
||||||
|
|
||||||
wakeEvents = WL_LATCH_SET | WL_POSTMASTER_DEATH | WL_TIMEOUT |
|
wakeEvents = WL_LATCH_SET | WL_POSTMASTER_DEATH | WL_TIMEOUT;
|
||||||
WL_SOCKET_READABLE;
|
|
||||||
|
if (!streamingDoneReceiving)
|
||||||
|
wakeEvents |= WL_SOCKET_READABLE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use fresh timestamp, not last_processed, to reduce the chance
|
* Use fresh timestamp, not last_processed, to reduce the chance
|
||||||
|
Loading…
x
Reference in New Issue
Block a user