From: Marko Kreen Date: Tue, 26 Jan 2016 20:52:08 +0000 (+0200) Subject: cleanup: proparly free autodbs X-Git-Tag: pgbouncer_1_7_1~16 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=201fdba4c6f398adc9f391df5e8f354a2b07ef5d;p=pgbouncer cleanup: proparly free autodbs --- diff --git a/include/janitor.h b/include/janitor.h index eaa813a..e911748 100644 --- a/include/janitor.h +++ b/include/janitor.h @@ -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); diff --git a/src/janitor.c b/src/janitor.c index 12195e5..152ba0b 100644 --- a/src/janitor.c +++ b/src/janitor.c @@ -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; diff --git a/src/objects.c b/src/objects.c index 93eaa88..655e539 100644 --- a/src/objects.c +++ b/src/objects.c @@ -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);