From 46e70172f5fc9ed9f316c152e2af529dcdd66b20 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Tue, 13 Mar 2012 12:04:15 +0200 Subject: [PATCH] autodb: drop old connections on config change We already do it for regular databases, but autodb needs different approach. Reported-by: Maxim Boguk --- include/objects.h | 1 + src/loader.c | 5 ++++- src/objects.c | 13 ++++++++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/objects.h b/include/objects.h index 92e46f2..218244b 100644 --- a/include/objects.h +++ b/include/objects.h @@ -67,6 +67,7 @@ int get_active_client_count(void); int get_active_server_count(void); void tag_database_dirty(PgDatabase *db); +void tag_autodb_dirty(void); void tag_host_addr_dirty(const char *host, const struct sockaddr *sa); void for_each_server(PgPool *pool, void (*func)(PgSocket *sk)); diff --git a/src/loader.c b/src/loader.c index 6b19d1e..9b914a6 100644 --- a/src/loader.c +++ b/src/loader.c @@ -163,8 +163,11 @@ static void set_autodb(const char *connstr) log_warning("no mem to change autodb_connstr"); return; } - if (cf_autodb_connstr) + if (cf_autodb_connstr) { + if (strcmp(connstr, cf_autodb_connstr) != 0) + tag_autodb_dirty(); free(cf_autodb_connstr); + } cf_autodb_connstr = tmp; } diff --git a/src/objects.c b/src/objects.c index 04ca32a..098e5d8 100644 --- a/src/objects.c +++ b/src/objects.c @@ -1297,7 +1297,6 @@ static void tag_dirty(PgSocket *sk) sk->close_needed = 1; } - void tag_database_dirty(PgDatabase *db) { struct List *item; @@ -1310,6 +1309,18 @@ void tag_database_dirty(PgDatabase *db) } } +void tag_autodb_dirty(void) +{ + struct List *item; + PgPool *pool; + + statlist_for_each(item, &pool_list) { + pool = container_of(item, PgPool, head); + if (pool->db->db_auto) + for_each_server(pool, tag_dirty); + } +} + static bool server_remote_addr_filter(PgSocket *sk, void *arg) { PgAddr *addr = arg; -- 2.40.0