adjust_sigterm_handling.patch
text/x-diff
Filename: adjust_sigterm_handling.patch
Type: text/x-diff
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/access/transam/xlogarchive.c | 4 | 3 |
| src/backend/postmaster/startup.c | 6 | 26 |
| src/include/postmaster/startup.h | 1 | 2 |
diff --git a/src/backend/access/transam/xlogarchive.c b/src/backend/access/transam/xlogarchive.c
index 4b89addf97..56c8bf8c18 100644
--- a/src/backend/access/transam/xlogarchive.c
+++ b/src/backend/access/transam/xlogarchive.c
@@ -148,16 +148,17 @@ RestoreArchivedFile(char *path, const char *xlogfname,
XLogFileName(lastRestartPointFname, 0, 0L, wal_segment_size);
/*
- * Check signals before restore command and reset afterwards.
+ * Check for pending shutdown requests before and after executing
+ * restore_command and exit if there is one.
*/
- PreRestoreCommand();
+ HandleStartupProcShutdownRequest();
/*
* Copy xlog from archival storage to XLOGDIR
*/
ret = shell_restore(xlogfname, xlogpath, lastRestartPointFname);
- PostRestoreCommand();
+ HandleStartupProcShutdownRequest();
if (ret)
{
diff --git a/src/backend/postmaster/startup.c b/src/backend/postmaster/startup.c
index bcd23542f1..30c67a670c 100644
--- a/src/backend/postmaster/startup.c
+++ b/src/backend/postmaster/startup.c
@@ -55,12 +55,6 @@ static volatile sig_atomic_t got_SIGHUP = false;
static volatile sig_atomic_t shutdown_requested = false;
static volatile sig_atomic_t promote_signaled = false;
-/*
- * Flag set when executing a restore command, to tell SIGTERM signal handler
- * that it's safe to just proc_exit.
- */
-static volatile sig_atomic_t in_restore_command = false;
-
/*
* Time at which the most recent startup operation started.
*/
@@ -120,10 +114,7 @@ StartupProcShutdownHandler(SIGNAL_ARGS)
{
int save_errno = errno;
- if (in_restore_command)
- proc_exit(1);
- else
- shutdown_requested = true;
+ shutdown_requested = true;
WakeupRecovery();
errno = save_errno;
@@ -183,8 +174,7 @@ HandleStartupProcInterrupts(void)
/*
* Check if we were requested to exit without finishing recovery.
*/
- if (shutdown_requested)
- proc_exit(1);
+ HandleStartupProcShutdownRequest();
/*
* Emergency bailout if postmaster has died. This is to avoid the
@@ -273,26 +263,16 @@ StartupProcessMain(void)
proc_exit(0);
}
+/*
+ * Exit if there is a pending shutdown request.
+ */
void
-PreRestoreCommand(void)
+HandleStartupProcShutdownRequest(void)
{
- /*
- * Set in_restore_command to tell the signal handler that we should exit
- * right away on SIGTERM. We know that we're at a safe point to do that.
- * Check if we had already received the signal, so that we don't miss a
- * shutdown request received just before this.
- */
- in_restore_command = true;
if (shutdown_requested)
proc_exit(1);
}
-void
-PostRestoreCommand(void)
-{
- in_restore_command = false;
-}
-
bool
IsPromoteSignaled(void)
{
diff --git a/src/include/postmaster/startup.h b/src/include/postmaster/startup.h
index dd957f9291..fc20eea1d4 100644
--- a/src/include/postmaster/startup.h
+++ b/src/include/postmaster/startup.h
@@ -27,8 +27,7 @@ extern PGDLLIMPORT int log_startup_progress_interval;
extern void HandleStartupProcInterrupts(void);
extern void StartupProcessMain(void) pg_attribute_noreturn();
-extern void PreRestoreCommand(void);
-extern void PostRestoreCommand(void);
+extern void HandleStartupProcShutdownRequest(void);
extern bool IsPromoteSignaled(void);
extern void ResetPromoteSignaled(void);