static struct linpool *f_pool;
static struct ea_list **f_tmp_attrs;
static int f_flags;
+static rta *f_rta_copy;
#define runtime(x) do { \
log( L_ERR x ); \
}
if (!(what->aux & EAF_TEMP) && (!(f_flags & FF_FORCE_TMPATTR))) {
- *f_rte = rte_cow(*f_rte);
- l->next = (*f_rte)->attrs->eattrs;
- (*f_rte)->attrs->eattrs = l;
+ if (!f_rta_copy) {
+ f_rta_copy = lp_alloc(f_pool, sizeof(rta));
+ memcpy(f_rta_copy, (*f_rte)->attrs, sizeof(rta));
+ f_rta_copy->aflags = 0;
+ *f_rte = rte_cow(*f_rte);
+ (*f_rte)->attrs = f_rta_copy;
+ }
+ l->next = f_rta_copy->eattrs;
+ f_rta_copy->eattrs = l;
} else {
l->next = (*f_tmp_attrs);
(*f_tmp_attrs) = l;
f_tmp_attrs = tmp_attrs;
f_rte = rte;
f_rte_old = *rte;
+ f_rta_copy = NULL;
f_pool = tmp_pool;
inst = filter->root;
res = interpret(inst);