• Alvaro Herrera's avatar
    libpq: Fix sending queries in pipeline aborted state · 1beaa654
    Alvaro Herrera authored
    When sending queries in pipeline mode, we were careless about leaving
    the connection in the right state so that PQgetResult would behave
    correctly; trying to read further results after sending a query after
    having read a result with an error would sometimes hang.  Fix by
    ensuring internal libpq state is changed properly.  All the state
    changes were being done by the callers of pqAppendCmdQueueEntry(); it
    would have become too repetitious to have this logic in each of them, so
    instead put it all in that function and relieve callers of the
    responsibility.
    
    Add a test to verify this case.  Without the code fix, this new test
    hangs sometimes.
    
    Also, document that PQisBusy() would return false when no queries are
    pending result.  This is not intuitively obvious, and NULL would be
    obtained by calling PQgetResult() at that point, which is confusing.
    Wording by Boris Kolpackov.
    
    In passing, fix bogus use of "false" to mean "0", per Ranier Vilela.
    
    Backpatch to 14.
    
    Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
    Reported-by: default avatarBoris Kolpackov <boris@codesynthesis.com>
    Discussion: https://postgr.es/m/boris.20210624103805@codesynthesis.com
    1beaa654
libpq_pipeline.c 46.3 KB