aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2016-07-28 11:39:10 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2016-07-28 11:39:10 -0400
commit93b99d3b6aec67a5eac30c67c511dbb03dd2f72c (patch)
treed691ee188ef317a5ac546b59855a320a46642c56
parent6b8a89e646be8a25771e292e09550aa1abe7019d (diff)
downloadpostgresql-93b99d3b6aec67a5eac30c67c511dbb03dd2f72c.tar.gz
postgresql-93b99d3b6aec67a5eac30c67c511dbb03dd2f72c.zip
Register atexit hook only once in pg_upgrade.
start_postmaster() registered stop_postmaster_atexit as an atexit(3) callback each time through, although the obvious intention was to do so only once per program run. The extra registrations were harmless, so long as we didn't exceed ATEXIT_MAX, but still it's a bug. Artur Zakirov, with bikeshedding by Kyotaro Horiguchi and me Discussion: <d279e817-02b5-caa6-215f-cfb05dce109a@postgrespro.ru>
-rw-r--r--src/bin/pg_upgrade/server.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/bin/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c
index 8c6b6da5153..a1a8b098e6c 100644
--- a/src/bin/pg_upgrade/server.c
+++ b/src/bin/pg_upgrade/server.c
@@ -174,10 +174,11 @@ start_postmaster(ClusterInfo *cluster, bool throw_error)
{
char cmd[MAXPGPATH * 4 + 1000];
PGconn *conn;
- bool exit_hook_registered = false;
bool pg_ctl_return = false;
char socket_string[MAXPGPATH + 200];
+ static bool exit_hook_registered = false;
+
if (!exit_hook_registered)
{
atexit(stop_postmaster_atexit);