summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Maria Matejka <mq@ucw.cz>2018-12-14 16:10:19 +0100
committerMaria Matejka <mq@ucw.cz>2019-01-17 13:50:47 +0100
commit954888859969587a288501b6801ab0ddb1f94133 (patch)
tree77126a6542005c3a801a4f823c2ec25acf68a5ec
parent3e60932a289e55e212dec1cbaf3bca44b2bbaeb8 (diff)
Nest: Don't make tmp_attr before preexport is called
-rw-r--r--nest/rt-table.c10
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);