]> granicus.if.org Git - pgbouncer/commitdiff
cleanup: proparly free autodbs
authorMarko Kreen <markokr@gmail.com>
Tue, 26 Jan 2016 20:52:08 +0000 (22:52 +0200)
committerMarko Kreen <markokr@gmail.com>
Tue, 26 Jan 2016 20:52:08 +0000 (22:52 +0200)
include/janitor.h
src/janitor.c
src/objects.c

index eaa813aa2b148286508e513bb74953560c31aa46..e91174894834642869f8e39250809e48809349e7 100644 (file)
@@ -22,4 +22,5 @@ void resume_all(void);
 void per_loop_maint(void);
 bool suspend_socket(PgSocket *sk, bool force)  _MUSTCHECK;
 void kill_pool(PgPool *pool);
+void kill_database(PgDatabase *db);
 
index 12195e502417df37a3538d515ea7b2cfae91bd38..152ba0b5764a0915fb8b0d529345be98636a5192 100644 (file)
@@ -508,7 +508,6 @@ static void cleanup_client_logins(void)
        }
 }
 
-static void kill_database(PgDatabase *db);
 static void cleanup_inactive_autodatabases(void)
 {
        struct List *item, *tmp;
@@ -625,7 +624,7 @@ void kill_pool(PgPool *pool)
        slab_free(pool_cache, pool);
 }
 
-static void kill_database(PgDatabase *db)
+void kill_database(PgDatabase *db)
 {
        PgPool *pool;
        struct List *item, *tmp;
index 93eaa8890eecd51867768c0cca08c2f5c791fcbc..655e539325c14222e8abd3b13949b3a15ee657e8 100644 (file)
@@ -1587,18 +1587,21 @@ void reuse_just_freed_objects(void)
 
 void objects_cleanup(void)
 {
-       struct List *item;
+       struct List *item, *tmp;
        PgDatabase *db;
 
        /* close can be postpones, just in case call twice */
        reuse_just_freed_objects();
        reuse_just_freed_objects();
 
-       statlist_for_each(item, &database_list) {
+       statlist_for_each_safe(item, &autodatabase_idle_list, tmp) {
+               db = container_of(item, PgDatabase, head);
+               kill_database(db);
+       }
+       statlist_for_each_safe(item, &database_list, tmp) {
                db = container_of(item, PgDatabase, head);
-               db->db_dead = 1;
+               kill_database(db);
        }
-       config_postprocess();
 
        memset(&login_client_list, 0, sizeof login_client_list);
        memset(&user_list, 0, sizeof user_list);