> On Nov 7, 2025, at 00:38, Fujii Masao <[email protected]> wrote:
>
> On Thu, Nov 6, 2025 at 8:38 AM Chao Li <[email protected]> wrote:
>> I just eyeball reviewed v20 and got a doubt:
>
> Thanks for the review!
>
>
>> +static void
>> +discardAvailableResults(CState *st)
>> +{
>> + PGresult *res = NULL;
>> +
>> + for (;;)
>> + {
>> + res = PQgetResult(st->con);
>> +
>> + /*
>> + * Read and discard results until PQgetResult() returns NULL
>> (no more
>> + * results) or a connection failure is detected. If the
>> pipeline
>> + * status is PQ_PIPELINE_ABORTED, more results may still be
>> available
>> + * even after PQgetResult() returns NULL, so continue
>> reading in that
>> + * case.
>> + */
>> + if ((res == NULL && PQpipelineStatus(st->con) !=
>> PQ_PIPELINE_ABORTED) ||
>> + PQstatus(st->con) == CONNECTION_BAD)
>> + break;
>> +
>> + PQclear(res);
>> + }
>> + PQclear(res);
>> +}
>> ```
>>
>> If pipeline is aborted and no more results, then the “if” will be "true &&
>> false”. And in this case, I guess PQstatus(st->con) != CONNECTION_BAD
>> because it’s not a connection error, then overall, the “if” will be “false”,
>> and it falls into an infinite loop.
>
> Can this situation actually happen? It would be helpful if you could share
> the custom script that triggers it.
No, I don’t have such a script. I am on vacation and traveling with my family
this week, I just found a little time to work on the day, that was why I only
did an eyeball review.
>
> When the pipeline is aborted, PGRES_PIPELINE_SYNC should arrive afterward,
> changing the status from PQ_PIPELINE_ABORTED to PQ_PIPELINE_ON. That should
> make the condition true and prevent an infinite loop, right?
>
If you put this explanation to the inline comment, things would get clearer.
But based on this explanation, I just got the other doubt. When a pipeline is
aborted, res is NULL, but we still stay in the for loop, PQClear(res) will do
nothing, then the “for” loop is similar to an empty loop, would that lead to a
high CPU usage? From this perspective, when pipeline is aborted, while waiting
for PIPELINE_SYNC, adding a tiny sleep might be better.
I will back to work next Monday, then I will try to run a test and reproduce
the scenario of pipeline abort.
Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/