summaryrefslogtreecommitdiff
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
commit8b018cb1f90e7e5e793e28dc0085a7af4c330ee1 (patch)
treea57b638609848f1b256d29e8d8350fe0c920ca42
parent087ac1dc60faa47d324400728e1365f75c914b5d (diff)
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 3d041efbfd0..ab91f0062cd 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);