]> granicus.if.org Git - pgbouncer/commitdiff
Skip cleanup if there is takeover
authorMarko Kreen <markokr@gmail.com>
Wed, 24 Feb 2016 19:15:15 +0000 (21:15 +0200)
committerMarko Kreen <markokr@gmail.com>
Wed, 24 Feb 2016 19:15:15 +0000 (21:15 +0200)
include/admin.h
src/admin.c
src/main.c

index 87d7ee9c3ed6cf885253c3dde62f49d9f6a78cb0..08cb99af6c5b4dbc2f5df2f677a825a1691d8196 100644 (file)
@@ -15,6 +15,9 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
+
+extern bool got_show_fds;
+
 bool admin_handle_client(PgSocket *client, PktHdr *pkt)  _MUSTCHECK;
 bool admin_pre_login(PgSocket *client, const char *username)  _MUSTCHECK;
 bool admin_post_login(PgSocket *client)  _MUSTCHECK;
index 735a21a595afbc337fbad56753f7914be8f9ba34..74fed1a2e0b04082ece834359182e7dcdd61b3f5 100644 (file)
@@ -69,6 +69,8 @@ static PgPool *admin_pool;
 /* only valid during processing */
 static const char *current_query;
 
+bool got_show_fds;
+
 void admin_cleanup(void)
 {
        regfree(&rc_cmd);
@@ -369,6 +371,8 @@ static bool show_fds_from_list(PgSocket *admin, struct StatList *list)
        PgSocket *sk;
        bool res = true;
 
+       got_show_fds = true;
+
        statlist_for_each(item, list) {
                sk = container_of(item, PgSocket, head);
                res = show_one_fd(admin, sk);
index 44e4d4b2cbb10059b9700e4bd1cebf1cae7c0b7f..16eca88361aea20f4e5b3ad7659d3f722efa4417 100644 (file)
@@ -922,7 +922,9 @@ int main(int argc, char *argv[])
        while (cf_shutdown < 2)
                main_loop_once();
 
-       cleanup();
+       /* proper cleanup, unless there is takeover */
+       if (!got_show_fds)
+               cleanup();
 
        return 0;
 }