• Michael Paquier's avatar
    Fix query cancellation handling in psql · 5d43c3c5
    Michael Paquier authored
    The refactoring done in a4fd3aa7 for query cancellation has messed up
    with the logic in psql by mixing CancelRequested and cancel_pressed,
    breaking for example \watch.  The former would be switched to true if a
    cancellation request has been attempted and that it actually succeeded,
    and the latter tracks if a cancellation attempt has been done.
    
    This commit brings back the code of psql to a state consistent to what
    it was before a4fd3aa7, without giving up on the refactoring pieces
    introduced.  It should be actually possible to merge more both flags as
    their concepts are close enough, however note that psql's --single-step
    mode relies on cancel_pressed to be always set, so this requires more
    careful analysis left for later.
    
    While on it, fix the declarations of CancelRequested (in cancel.c) and
    cancel_pressed (in psql) to be volatile sig_atomic_t.  Previously,
    both were declared as booleans, which should be fine on modern
    platforms, but the C standard recommends the use of sig_atomic_t for
    variables used in signal handlers.  Note that since its introduction in
    a1792320, CancelRequested declaration was not volatile.
    
    Reported-by: Jeff Janes
    Author: Michael Paquier
    Discussion: https://postgr.es/m/CAMkU=1zpoUDGKqWKuMWkj7t-bOCaJDx0r=5te_-d0B2HVLABXg@mail.gmail.com
    5d43c3c5
common.c 52.4 KB