mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
Kill pg_basebackup background process when exiting
If an error occurs in the foreground (backup) process of pg_basebackup, and we exit in a controlled way, the background process (streaming xlog process) would stay around and keep streaming.
This commit is contained in:
parent
1c9acd5c86
commit
63ab2befe0
@ -76,6 +76,7 @@ static PQExpBuffer recoveryconfcontents = NULL;
|
||||
|
||||
/* Function headers */
|
||||
static void usage(void);
|
||||
static void disconnect_and_exit(int code);
|
||||
static void verify_dir_is_empty_or_create(char *dirname);
|
||||
static void progress_report(int tablespacenum, const char *filename, bool force);
|
||||
|
||||
@ -88,6 +89,26 @@ static void BaseBackup(void);
|
||||
static bool reached_end_position(XLogRecPtr segendpos, uint32 timeline,
|
||||
bool segment_finished);
|
||||
|
||||
|
||||
static void disconnect_and_exit(int code)
|
||||
{
|
||||
if (conn != NULL)
|
||||
PQfinish(conn);
|
||||
|
||||
#ifndef WIN32
|
||||
/*
|
||||
* On windows, our background thread dies along with the process.
|
||||
* But on Unix, if we have started a subprocess, we want to kill
|
||||
* it off so it doesn't remain running trying to stream data.
|
||||
*/
|
||||
if (bgchild> 0)
|
||||
kill(bgchild, SIGTERM);
|
||||
#endif
|
||||
|
||||
exit(code);
|
||||
}
|
||||
|
||||
|
||||
#ifdef HAVE_LIBZ
|
||||
static const char *
|
||||
get_gz_error(gzFile gzf)
|
||||
|
@ -45,6 +45,13 @@ static void StreamLog();
|
||||
static bool stop_streaming(XLogRecPtr segendpos, uint32 timeline,
|
||||
bool segment_finished);
|
||||
|
||||
#define disconnect_and_exit(code) \
|
||||
{ \
|
||||
if (conn != NULL) PQfinish(conn); \
|
||||
exit(code); \
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
|
@ -11,10 +11,4 @@ extern char *replication_slot;
|
||||
/* Connection kept global so we can disconnect easily */
|
||||
extern PGconn *conn;
|
||||
|
||||
#define disconnect_and_exit(code) \
|
||||
{ \
|
||||
if (conn != NULL) PQfinish(conn); \
|
||||
exit(code); \
|
||||
}
|
||||
|
||||
extern PGconn *GetConnection(void);
|
||||
|
Loading…
Reference in New Issue
Block a user