diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 00b1e823af..9facfd4ee3 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -506,7 +506,7 @@ AutoVacLauncherMain(int argc, char *argv[]) * * This code is a stripped down version of PostgresMain error recovery. */ - if (sigsetjmp(local_sigjmp_buf, 1) != 0) + if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0) { /* since not using PG_TRY, must reset error stack by hand */ error_context_stack = NULL; @@ -1576,7 +1576,7 @@ AutoVacWorkerMain(int argc, char *argv[]) * * See notes in postgres.c about the design of this coding. */ - if (sigsetjmp(local_sigjmp_buf, 1) != 0) + if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0) { /* Prevents interrupts while cleaning up */ HOLD_INTERRUPTS(); diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index 28af6f0f07..8238d721f3 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -767,7 +767,7 @@ StartBackgroundWorker(void) * * See notes in postgres.c about the design of this coding. */ - if (sigsetjmp(local_sigjmp_buf, 1) != 0) + if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0) { /* Since not using PG_TRY, must reset error stack by hand */ error_context_stack = NULL; diff --git a/src/backend/postmaster/bgwriter.c b/src/backend/postmaster/bgwriter.c index 9ad74ee977..8b1596c658 100644 --- a/src/backend/postmaster/bgwriter.c +++ b/src/backend/postmaster/bgwriter.c @@ -171,7 +171,7 @@ BackgroundWriterMain(void) * * See notes in postgres.c about the design of this coding. */ - if (sigsetjmp(local_sigjmp_buf, 1) != 0) + if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0) { /* Since not using PG_TRY, must reset error stack by hand */ error_context_stack = NULL; @@ -268,7 +268,7 @@ BackgroundWriterMain(void) { /* * From here on, elog(ERROR) should end with exit(1), not send - * control back to the sigsetjmp block above + * control back to the pg_sigsetjmp block above */ ExitOnAnyError = true; /* Normal exit from the bgwriter is here */ diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index e48ebd557f..682446e764 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -253,7 +253,7 @@ CheckpointerMain(void) * * See notes in postgres.c about the design of this coding. */ - if (sigsetjmp(local_sigjmp_buf, 1) != 0) + if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0) { /* Since not using PG_TRY, must reset error stack by hand */ error_context_stack = NULL; @@ -392,7 +392,7 @@ CheckpointerMain(void) { /* * From here on, elog(ERROR) should end with exit(1), not send - * control back to the sigsetjmp block above + * control back to the pg_sigsetjmp block above */ ExitOnAnyError = true; /* Close down the database */ diff --git a/src/backend/postmaster/walwriter.c b/src/backend/postmaster/walwriter.c index 7b89e02428..4394b1e260 100644 --- a/src/backend/postmaster/walwriter.c +++ b/src/backend/postmaster/walwriter.c @@ -151,7 +151,7 @@ WalWriterMain(void) * * This code is heavily based on bgwriter.c, q.v. */ - if (sigsetjmp(local_sigjmp_buf, 1) != 0) + if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0) { /* Since not using PG_TRY, must reset error stack by hand */ error_context_stack = NULL; diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index b8d860ebdb..67a72769fb 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -3822,15 +3822,15 @@ PostgresMain(int argc, char *argv[], * during error recovery. (If we get into an infinite loop thereby, it * will soon be stopped by overflow of elog.c's internal state stack.) * - * Note that we use sigsetjmp(..., 1), so that this function's signal mask - * (to wit, UnBlockSig) will be restored when longjmp'ing to here. This - * is essential in case we longjmp'd out of a signal handler on a platform - * where that leaves the signal blocked. It's not redundant with the - * unblock in AbortTransaction() because the latter is only called if we - * were inside a transaction. + * Note that we use pg_sigsetjmp(..., 1), so that this function's signal + * mask (to wit, UnBlockSig) will be restored when longjmp'ing to here. + * This is essential in case we longjmp'd out of a signal handler on a + * platform where that leaves the signal blocked. It's not redundant with + * the unblock in AbortTransaction() because the latter is only called if + * we were inside a transaction. */ - if (sigsetjmp(local_sigjmp_buf, 1) != 0) + if (pg_sigsetjmp(local_sigjmp_buf, 1) != 0) { /* * NOTE: if you are tempted to add more code in this if-block, diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l index f01b814c6e..93caeb3c48 100644 --- a/src/backend/utils/misc/guc-file.l +++ b/src/backend/utils/misc/guc-file.l @@ -704,7 +704,7 @@ ParseConfigFp(FILE *fp, const char *config_file, int depth, int elevel, int errorcount; int token; - if (sigsetjmp(flex_fatal_jmp, 1) == 0) + if (pg_sigsetjmp(flex_fatal_jmp, 1) == 0) GUC_flex_fatal_jmp = &flex_fatal_jmp; else { diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 4e04459d45..b9f5946e25 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -4423,7 +4423,7 @@ do_watch(PQExpBuffer query_buf, double sleep) * through the loop since it's conceivable something inside * PSQLexecWatch could change sigint_interrupt_jmp. */ - if (sigsetjmp(sigint_interrupt_jmp, 1) != 0) + if (pg_sigsetjmp(sigint_interrupt_jmp, 1) != 0) break; /* diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c index 724ea9211a..ab27c4b5ab 100644 --- a/src/bin/psql/copy.c +++ b/src/bin/psql/copy.c @@ -521,7 +521,7 @@ handleCopyIn(PGconn *conn, FILE *copystream, bool isbinary, PGresult **res) * Establish longjmp destination for exiting from wait-for-input. (This is * only effective while sigint_interrupt_enabled is TRUE.) */ - if (sigsetjmp(sigint_interrupt_jmp, 1) != 0) + if (pg_sigsetjmp(sigint_interrupt_jmp, 1) != 0) { /* got here with longjmp */ diff --git a/src/bin/psql/mainloop.c b/src/bin/psql/mainloop.c index 0162ee8d2f..d2ebaaabda 100644 --- a/src/bin/psql/mainloop.c +++ b/src/bin/psql/mainloop.c @@ -108,7 +108,7 @@ MainLoop(FILE *source) * must re-do this each time through the loop for safety, since the * jmpbuf might get changed during command execution. */ - if (sigsetjmp(sigint_interrupt_jmp, 1) != 0) + if (pg_sigsetjmp(sigint_interrupt_jmp, 1) != 0) { /* got here with longjmp */ diff --git a/src/include/c.h b/src/include/c.h index 9066e3c578..6a934c7faf 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -1086,8 +1086,10 @@ extern int vsnprintf(char *str, size_t count, const char *fmt, va_list args); */ #ifdef WIN32 #define sigjmp_buf jmp_buf -#define sigsetjmp(x,y) setjmp(x) +#define pg_sigsetjmp(x,y) setjmp(x) #define siglongjmp longjmp +#else +#define pg_sigsetjmp(x,y) sigsetjmp(x,y) #endif #if defined(HAVE_FDATASYNC) && !HAVE_DECL_FDATASYNC diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h index 7bfd25a9e9..dc666930b4 100644 --- a/src/include/utils/elog.h +++ b/src/include/utils/elog.h @@ -286,7 +286,7 @@ extern PGDLLIMPORT ErrorContextCallback *error_context_stack; sigjmp_buf *save_exception_stack = PG_exception_stack; \ ErrorContextCallback *save_context_stack = error_context_stack; \ sigjmp_buf local_sigjmp_buf; \ - if (sigsetjmp(local_sigjmp_buf, 0) == 0) \ + if (pg_sigsetjmp(local_sigjmp_buf, 0) == 0) \ { \ PG_exception_stack = &local_sigjmp_buf