diff --git a/contrib/worker_spi/worker_spi.c b/contrib/worker_spi/worker_spi.c index 414721a70fe..84ac1b7730b 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 b0dde7564d8..7d2ffd14fef 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 ec2677380bf..1e41a0e75ec 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 53167057e9a..e91e344eb67 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 */