aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2016-07-28 11:39:11 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2016-07-28 11:39:11 -0400
commit1be038795694565430126b9edcb64149d718775b (patch)
treebf2a5856961c598817b40405ab8592ceb4700bd5
parentb54ba3bc5be5437b15c5cb657a097a2b3cb91d6b (diff)
downloadpostgresql-1be038795694565430126b9edcb64149d718775b.tar.gz
postgresql-1be038795694565430126b9edcb64149d718775b.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--contrib/pg_upgrade/server.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/contrib/pg_upgrade/server.c b/contrib/pg_upgrade/server.c
index 818417a5fff..c55f4b77458 100644
--- a/contrib/pg_upgrade/server.c
+++ b/contrib/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);