From: | Michael Paquier <michael(dot)paquier(at)gmail(dot)com> |
---|---|
To: | hlinnaka(at)iki(dot)fi |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Pg Bugs <pgsql-bugs(at)postgresql(dot)org> |
Subject: | Re: PQexec() hangs on OOM |
Date: | 2015-04-10 11:53:34 |
Message-ID: | CAB7nPqQBPSwz+g2BN5HQyUiMEUY-Scr9jm7RyBSOeo00HFo3gw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On Fri, Apr 10, 2015 at 2:42 AM, Heikki Linnakangas <hlinnaka(at)iki(dot)fi> wrote:
> On 04/08/2015 07:27 AM, Michael Paquier wrote:
>>
>> On Wed, Apr 8, 2015 at 3:54 AM, Heikki Linnakangas wrote:
>>>
>>> On 04/07/2015 09:18 AM, Michael Paquier wrote:
>>>>
>>>> I have noticed as well that getCopyStart() in fe-protocol3.c needs to
>>>> be made a little bit smarter to make the difference between an OOM and
>>>> the not-enough-data type of problem.
>>>
>>>
>>> Yeah. getParamDescription still has the issue, with your patch.
>>
>>
>> Check.
>
>
> There are still a few parseInput subroutines that have similar issues. In
> fe-protocol2.c:
>
> * pqGetErrorNotice2 returns EOF if there is not enough data, but also on
> OOM. The caller assumes it's because not enough data.
> * getRowDescriptions() is the same, although it sets conn->errorMessage on
> OOM.
OK, I extended those two with the same logic as previously.
> * getAnotherTuple() is the same, but it also skips over the received data,
> so you won't get stuck. So maybe that's OK.
I think that it should be changed for consistency with the others, so
done this way for this function, and this way we only need to bail-out
if status == -2, a status of -1 meaning that there is not enough data.
> * getNotify() just drops any NOTIFY messages on OOM. Perhaps that's OK..
This one is different though, it directly skips the messages.
> The corresponding functions in fe-protocol3.c are pretty much identical,
> with the same issues. In addition:
>
> * getParameterStatus will act as if the parameter value was "out of memory".
> That'll be fun for something like client_encoding or
> standard_conforming_strings. Would be good to use a small char[100]
> variable, in stack, if it fits, and only use malloc for larger values. That
> would cover all the common variables that need to be machine-parsed.
Are you suggesting to replace PQExpBuffer?
So, attached is take three for all the other things above.
Regards,
--
Michael
Attachment | Content-Type | Size |
---|---|---|
0001-Improve-OOM-detection-of-parseInput-in-libpq.patch | text/x-patch | 41.0 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2015-04-10 16:17:04 | Re: BUG #8470: 9.3 locking/subtransaction performance regression |
Previous Message | Pavithran Sudarmozhi | 2015-04-10 09:52:07 |