From 295f9bbf1d2d1e985471bd523c7c9bfd3d134759 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Mon, 22 Jul 2013 14:13:00 -0400 Subject: [PATCH] Remove bgw_sighup and bgw_sigterm. Per discussion on pgsql-hackers, these aren't really needed. Interim versions of the background worker patch had the worker starting with signals already unblocked, which would have made this necessary. But the final version does not, so we don't really need it; and it doesn't work well with the new facility for starting dynamic background workers, so just rip it out. Also per discussion on pgsql-hackers, back-patch this change to 9.3. It's best to get the API break out of the way before we do an official release of this facility, to avoid more pain for extension authors later. --- contrib/worker_spi/worker_spi.c | 6 ++++-- doc/src/sgml/bgworker.sgml | 13 +------------ src/backend/postmaster/postmaster.c | 12 ++---------- src/include/postmaster/bgworker.h | 3 --- 4 files changed, 7 insertions(+), 27 deletions(-) diff --git a/contrib/worker_spi/worker_spi.c b/contrib/worker_spi/worker_spi.c index 414721a70f..84ac1b7730 100644 --- a/contrib/worker_spi/worker_spi.c +++ b/contrib/worker_spi/worker_spi.c @@ -159,6 +159,10 @@ worker_spi_main(void *main_arg) worktable *table = (worktable *) main_arg; StringInfoData buf; + /* Establish signal handlers before unblocking signals. */ + pqsignal(SIGHUP, worker_spi_sighup); + pqsignal(SIGTERM, worker_spi_sigterm); + /* We're now ready to receive signals */ BackgroundWorkerUnblockSignals(); @@ -328,8 +332,6 @@ _PG_init(void) worker.bgw_start_time = BgWorkerStart_RecoveryFinished; worker.bgw_restart_time = BGW_NEVER_RESTART; worker.bgw_main = worker_spi_main; - worker.bgw_sighup = worker_spi_sighup; - worker.bgw_sigterm = worker_spi_sigterm; /* * Now fill in worker-specific data, and do the actual registrations. diff --git a/doc/src/sgml/bgworker.sgml b/doc/src/sgml/bgworker.sgml index b0dde7564d..7d2ffd14fe 100644 --- a/doc/src/sgml/bgworker.sgml +++ b/doc/src/sgml/bgworker.sgml @@ -38,7 +38,6 @@ The structure BackgroundWorker is defined thus: typedef void (*bgworker_main_type)(void *main_arg); -typedef void (*bgworker_sighdlr_type)(SIGNAL_ARGS); typedef struct BackgroundWorker { char *bgw_name; @@ -47,8 +46,6 @@ typedef struct BackgroundWorker int bgw_restart_time; /* in seconds, or BGW_NEVER_RESTART */ bgworker_main_type bgw_main; void *bgw_main_arg; - bgworker_sighdlr_type bgw_sighup; - bgworker_sighdlr_type bgw_sigterm; } BackgroundWorker; @@ -104,14 +101,6 @@ typedef struct BackgroundWorker passed at registration time. - - bgw_sighup and bgw_sigterm are - pointers to functions that will be installed as signal handlers for the new - process. If bgw_sighup is NULL, then SIG_IGN - is used; if bgw_sigterm is NULL, a handler is installed that - will terminate the process after logging a suitable message. - - Once running, the process can connect to a database by calling BackgroundWorkerInitializeConnection(char *dbname, char *username). This allows the process to run transactions and queries using the @@ -126,7 +115,7 @@ typedef struct BackgroundWorker Signals are initially blocked when control reaches the bgw_main function, and must be unblocked by it; this is to - allow the process to further customize its signal handlers, if necessary. + allow the process to customize its signal handlers, if necessary. Signals can be unblocked in the new process by calling BackgroundWorkerUnblockSignals and blocked by calling BackgroundWorkerBlockSignals. diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index ec2677380b..1e41a0e75e 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -5434,16 +5434,8 @@ do_start_bgworker(void) pqsignal(SIGFPE, SIG_IGN); } - /* SIGTERM and SIGHUP are configurable */ - if (worker->bgw_sigterm) - pqsignal(SIGTERM, worker->bgw_sigterm); - else - pqsignal(SIGTERM, bgworker_die); - - if (worker->bgw_sighup) - pqsignal(SIGHUP, worker->bgw_sighup); - else - pqsignal(SIGHUP, SIG_IGN); + pqsignal(SIGTERM, bgworker_die); + pqsignal(SIGHUP, SIG_IGN); pqsignal(SIGQUIT, bgworker_quickdie); InitializeTimeouts(); /* establishes SIGALRM handler */ diff --git a/src/include/postmaster/bgworker.h b/src/include/postmaster/bgworker.h index 53167057e9..e91e344eb6 100644 --- a/src/include/postmaster/bgworker.h +++ b/src/include/postmaster/bgworker.h @@ -53,7 +53,6 @@ typedef void (*bgworker_main_type) (void *main_arg); -typedef void (*bgworker_sighdlr_type) (SIGNAL_ARGS); /* * Points in time at which a bgworker can request to be started @@ -76,8 +75,6 @@ typedef struct BackgroundWorker int bgw_restart_time; /* in seconds, or BGW_NEVER_RESTART */ bgworker_main_type bgw_main; void *bgw_main_arg; - bgworker_sighdlr_type bgw_sighup; - bgworker_sighdlr_type bgw_sigterm; } BackgroundWorker; /* Register a new bgworker */ -- 2.40.0