Re: pgsql: libpq: Notice errors a backend may have sent just before dying. - Mailing list pgsql-committers

From Tom Lane
Subject Re: pgsql: libpq: Notice errors a backend may have sent just before dying.
Date
Msg-id 30762.1447347280@sss.pgh.pa.us
Whole thread Raw
In response to Re: pgsql: libpq: Notice errors a backend may have sent just before dying.  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: pgsql: libpq: Notice errors a backend may have sent just before dying.
Re: pgsql: libpq: Notice errors a backend may have sent just before dying.
List pgsql-committers
I wrote:
> After looking around, I suspect what actually happened in your test
> was that we kept pumping pqReadData until it realized it was seeing EOF,
> whereupon it did pqDropConnection(), and guess what that does:

>     /* Discard any unread/unsent data */
>     conn->inStart = conn->inCursor = conn->inEnd = 0;
>     conn->outCount = 0;

So after further review, this is a bug I introduced in 210eb9b74:
the fact that some code paths flushed the buffers and some did not
was less of an oversight than it appeared.  That explains why the
problem wasn't noticed years ago, because we'd certainly tested
pqHandleSendFailure and friends before.

I'm inclined to deal with this by adding a "dropInput" boolean flag
to pqDropConnection(), rather than reverting the centralization of
that logic altogether.

I'll go clean this up ...

            regards, tom lane


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: Re: pgsql: libpq: Notice errors a backend may have sent just before dying.
Next
From: Tom Lane
Date:
Subject: pgsql: Fix unwanted flushing of libpq's input buffer when socket EOF is