pgsql: Remove sketchy TerminateThread() call on Ctrl-C on Windows

From: Heikki Linnakangas <heikki(dot)linnakangas(at)iki(dot)fi>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Remove sketchy TerminateThread() call on Ctrl-C on Windows
Date: 2026-07-08 15:45:28
Message-ID: E1whUSm-000AHN-1I@gemulon.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Remove sketchy TerminateThread() call on Ctrl-C on Windows

When pg_dump or pg_restore --jobs N is interrupted with Ctrl-C on
Windows, we cancel all queries, but we don't want the cancellations to
be reported as errors to the user in the short time before the whole
process exits. That was previously achieved by calling
TerminateThread() on each worker thread before sending the cancel
message, but that doesn't appear to be 100% safe: the implementations
of write() and the socket calls inside PQcancel() might acquire user
space locks that were held by the terminated threads. (write()
certainly does that.)

Instead of silencing the threads in such a sketchy way this now sets a
volatile flag before sending any cancel requests that tells the
threads to not log errors anymore. (Instead of a volatile, it would be
better to use an atomic operation here, but that has to wait until we
add support for atomics on the frontend.)

Note that this also stops using pg_fatal() and exit to exit() from
workers on failure and instead use pg_log_error combined with
exit_nicely. If a query fails in a worker we want it to kill the
worker not the whole process. On Unix that's currently the same thing,
but on Windows workers are threads.

Author: Jelte Fennema-Nio <postgres(at)jeltef(dot)nl>
Reviewed-by: Bryan Green <dbryan(dot)green(at)gmail(dot)com>
Reviewed-by: Thomas Munro <thomas(dot)munro(at)gmail(dot)com>
Discussion: https://www.postgresql.org/message-id/DJPQS3FYSD4U.3DBTXA6U8IQ0Q@jeltef.nl

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/ad7877b00a4232d71bb4cb63c22f9d748e65e3f7

Modified Files
--------------
src/bin/pg_dump/parallel.c | 50 ++++++++++++--------------
src/bin/pg_dump/pg_backup_archiver.c | 69 +++++++++++++++++++-----------------
src/bin/pg_dump/pg_backup_db.c | 30 +++++++++++-----
src/bin/pg_dump/pg_backup_utils.c | 38 ++++++++++++++++++++
src/bin/pg_dump/pg_backup_utils.h | 21 +++++++++++
5 files changed, 141 insertions(+), 67 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Heikki Linnakangas 2026-07-08 17:43:01 pgsql: Refactor how some aux processes advertise their ProcNumber
Previous Message David Rowley 2026-07-08 13:12:57 pgsql: Introduce bms_offset_members() function