Fix child process segfault after reload if "health_check_database" is empty.
authorBo Peng <pengbo@sraoss.co.jp>
Wed, 12 Feb 2020 01:03:13 +0000 (10:03 +0900)
committerBo Peng <pengbo@sraoss.co.jp>
Wed, 12 Feb 2020 01:03:13 +0000 (10:03 +0900)
per bug571.

src/main/health_check.c

index 3c09b7907204e01e434aad87e70f0c48d0ef5f3e..01481465150203183fc49d9bbad0012b73883e0e 100644 (file)
@@ -305,6 +305,7 @@ establish_persistent_connection(int node)
        static time_t auto_failback_interval = 0; /* resume time of auto_failback */
        bool            check_failback = false;
        time_t          now;
+       char            *dbname;
 
        bkinfo = pool_get_node_info(node);
 
@@ -335,7 +336,9 @@ establish_persistent_connection(int node)
         * If database is not specified, "postgres" database is assumed.
         */
        if (*pool_config->health_check_params[node].health_check_database == '\0')
-               pool_config->health_check_params[node].health_check_database = "postgres";
+               dbname = "postgres";
+       else
+               dbname = pool_config->health_check_params[node].health_check_database;
 
        /*
         * Try to connect to the database.
@@ -364,7 +367,7 @@ establish_persistent_connection(int node)
 
                        slot = make_persistent_db_connection_noerror(node, bkinfo->backend_hostname,
                                                                                                                 bkinfo->backend_port,
-                                                                                                                pool_config->health_check_params[node].health_check_database,
+                                                                                                                dbname,
                                                                                                                 pool_config->health_check_params[node].health_check_user,
                                                                                                                 password ? password : "", false);