aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/worker_spi/worker_spi.c6
-rw-r--r--doc/src/sgml/bgworker.sgml13
-rw-r--r--src/backend/postmaster/postmaster.c12
-rw-r--r--src/include/postmaster/bgworker.h3
4 files changed, 7 insertions, 27 deletions
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 <structname>BackgroundWorker</structname> is defined thus:
<programlisting>
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;
</programlisting>
</para>
@@ -104,14 +101,6 @@ typedef struct BackgroundWorker
passed at registration time.
</para>
- <para>
- <structfield>bgw_sighup</structfield> and <structfield>bgw_sigterm</> are
- pointers to functions that will be installed as signal handlers for the new
- process. If <structfield>bgw_sighup</> is NULL, then <literal>SIG_IGN</>
- is used; if <structfield>bgw_sigterm</> is NULL, a handler is installed that
- will terminate the process after logging a suitable message.
- </para>
-
<para>Once running, the process can connect to a database by calling
<function>BackgroundWorkerInitializeConnection(<parameter>char *dbname</parameter>, <parameter>char *username</parameter>)</function>.
This allows the process to run transactions and queries using the
@@ -126,7 +115,7 @@ typedef struct BackgroundWorker
<para>
Signals are initially blocked when control reaches the
<structfield>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
<function>BackgroundWorkerUnblockSignals</> and blocked by calling
<function>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 */