diff options
author | Jan Maria Matejka <mq@ucw.cz> | 2018-12-14 16:10:19 +0100 |
---|---|---|
committer | Maria Matejka <mq@ucw.cz> | 2019-01-17 13:50:47 +0100 |
commit | 954888859969587a288501b6801ab0ddb1f94133 (patch) | |
tree | 77126a6542005c3a801a4f823c2ec25acf68a5ec | |
parent | 3e60932a289e55e212dec1cbaf3bca44b2bbaeb8 (diff) |
Nest: Don't make tmp_attr before preexport is called
-rw-r--r-- | nest/rt-table.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/nest/rt-table.c b/nest/rt-table.c index ae4bb74d..1cb8d2a1 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -405,8 +405,6 @@ export_filter_(struct channel *c, rte *rt0, rte **rt_free, linpool *pool, int si rt = rt0; *rt_free = NULL; - rte_make_tmp_attrs(&rt, pool); - v = p->preexport ? p->preexport(p, &rt, pool) : 0; if (v < 0) { @@ -425,6 +423,8 @@ export_filter_(struct channel *c, rte *rt0, rte **rt_free, linpool *pool, int si goto accept; } + rte_make_tmp_attrs(&rt, pool); + v = filter && ((filter == FILTER_REJECT) || (f_run(filter, &rt, pool, (silent ? FF_SILENT : 0)) > F_ACCEPT)); @@ -1477,12 +1477,14 @@ rt_examine(rtable *t, net_addr *a, struct proto *p, struct filter *filter) rte_update_lock(); /* Rest is stripped down export_filter() */ - rte_make_tmp_attrs(&rt, rte_update_pool); int v = p->preexport ? p->preexport(p, &rt, rte_update_pool) : 0; if (v == RIC_PROCESS) + { + rte_make_tmp_attrs(&rt, rte_update_pool); v = (f_run(filter, &rt, rte_update_pool, FF_SILENT) <= F_ACCEPT); + } - /* Discard temporary rte */ + /* Discard temporary rte */ if (rt != n->routes) rte_free(rt); |