static void set_autodb(const char *connstr)
{
char *tmp = strdup(connstr);
+ char *old = cf_autodb_connstr;
+
if (!tmp) {
log_warning("no mem to change autodb_connstr");
return;
}
- if (cf_autodb_connstr) {
- if (strcmp(connstr, cf_autodb_connstr) != 0)
+
+ cf_autodb_connstr = tmp;
+ if (old) {
+ if (strcmp(connstr, old) != 0)
tag_autodb_dirty();
- free(cf_autodb_connstr);
+ free(old);
}
- cf_autodb_connstr = tmp;
}
/* fill PgDatabase from connstr */
void tag_autodb_dirty(void)
{
- struct List *item;
+ struct List *item, *tmp;
+ PgDatabase *db;
PgPool *pool;
+ /*
+ * reload databases.
+ */
+ statlist_for_each(item, &database_list) {
+ db = container_of(item, PgDatabase, head);
+ if (db->db_auto)
+ register_auto_database(db->name);
+ }
+ statlist_for_each_safe(item, &autodatabase_idle_list, tmp) {
+ db = container_of(item, PgDatabase, head);
+ if (db->db_auto)
+ register_auto_database(db->name);
+ }
+ /*
+ * reload pools
+ */
statlist_for_each(item, &pool_list) {
pool = container_of(item, PgPool, head);
if (pool->db->db_auto)