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
9b584953e7
commit
a58db3aa10
@ -1719,7 +1719,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);
|
||||||
@ -1748,19 +1753,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)
|
||||||
{
|
{
|
||||||
@ -2362,8 +2354,10 @@ WalSndLoop(WalSndSendDataCallback send_data)
|
|||||||
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;
|
|
||||||
|
if (!streamingDoneReceiving)
|
||||||
|
wakeEvents |= WL_SOCKET_READABLE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use fresh timestamp, not last_processing, to reduce the chance
|
* Use fresh timestamp, not last_processing, to reduce the chance
|
||||||
|
Loading…
x
Reference in New Issue
Block a user