aboutsummaryrefslogtreecommitdiffstats
path: root/smtpd/config.c
diff options
context:
space:
mode:
authorGilles Chehade <gilles@poolp.org>2012-11-19 12:41:50 +0100
committerGilles Chehade <gilles@poolp.org>2012-11-19 12:41:50 +0100
commit8aff735d91dfa5ed76978c72ad062e285b1f8cdb (patch)
treec44277f74f483ca4e26bb5894302ef71e81cb96c /smtpd/config.c
parentMerge branch 'master' into byebye_mapel (diff)
downloadOpenSMTPD-8aff735d91dfa5ed76978c72ad062e285b1f8cdb.tar.xz
OpenSMTPD-8aff735d91dfa5ed76978c72ad062e285b1f8cdb.zip
- replace the env->sc_tables / env->sc_tables_reload table lists
with table tree and dict to allow faster lookups
Diffstat (limited to 'smtpd/config.c')
-rw-r--r--smtpd/config.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/smtpd/config.c b/smtpd/config.c
index 3324279d..3b8ede12 100644
--- a/smtpd/config.c
+++ b/smtpd/config.c
@@ -72,16 +72,17 @@ purge_config(uint8_t what)
env->sc_listeners = NULL;
}
if (what & PURGE_TABLES) {
- while ((t = TAILQ_FIRST(env->sc_tables)) != NULL) {
- TAILQ_REMOVE(env->sc_tables, t, t_entry);
-
+ while (tree_poproot(env->sc_tables_tree, NULL, (void **)&t)) {
p = NULL;
while (dict_poproot(&t->t_dict, NULL, (void **)&p))
free(p);
+ dict_xpop(env->sc_tables_dict, t->t_name);
free(t);
}
- free(env->sc_tables);
- env->sc_tables = NULL;
+ free(env->sc_tables_dict);
+ free(env->sc_tables_tree);
+ env->sc_tables_dict = NULL;
+ env->sc_tables_tree = NULL;
}
if (what & PURGE_RULES) {
while ((r = TAILQ_FIRST(env->sc_rules)) != NULL) {