From 3782454e8dead1184e698fa84f7491182b54454e Mon Sep 17 00:00:00 2001 From: Maria Matejka Date: Mon, 15 Jul 2019 15:23:35 +0200 Subject: [PATCH] Filter: Simpler filter context allocation --- filter/filter.c | 39 +++++++++++++++++++-------------------- lib/birdlib.h | 6 ++---- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/filter/filter.c b/filter/filter.c index 2aa2f629..35bd75e6 100644 --- a/filter/filter.c +++ b/filter/filter.c @@ -93,13 +93,8 @@ struct filter_state { int flags; }; -#if HAVE_THREAD_LOCAL _Thread_local static struct filter_state filter_state; _Thread_local static struct filter_stack filter_stack; -#define FS_INIT(...) filter_state = (struct filter_state) { .stack = &filter_stack, __VA_ARGS__ } -#else -#define FS_INIT(...) struct filter_state filter_state = { .stack = alloca(sizeof(struct filter_stack)), __VA_ARGS__ }; -#endif void (*bt_assert_hook)(int result, const struct f_line_item *assert); @@ -279,11 +274,12 @@ f_run(const struct filter *filter, struct rte **rte, struct linpool *tmp_pool, i DBG( "Running filter `%s'...", filter->name ); /* Initialize the filter state */ - FS_INIT( - .rte = rte, - .pool = tmp_pool, - .flags = flags, - ); + filter_state = (struct filter_state) { + .stack = &filter_stack, + .rte = rte, + .pool = tmp_pool, + .flags = flags, + }; LOG_BUFFER_INIT(filter_state.buf); @@ -342,10 +338,11 @@ f_run(const struct filter *filter, struct rte **rte, struct linpool *tmp_pool, i enum filter_return f_eval_rte(const struct f_line *expr, struct rte **rte, struct linpool *tmp_pool) { - FS_INIT( - .rte = rte, - .pool = tmp_pool, - ); + filter_state = (struct filter_state) { + .stack = &filter_stack, + .rte = rte, + .pool = tmp_pool, + }; LOG_BUFFER_INIT(filter_state.buf); @@ -364,9 +361,10 @@ f_eval_rte(const struct f_line *expr, struct rte **rte, struct linpool *tmp_pool enum filter_return f_eval(const struct f_line *expr, struct linpool *tmp_pool, struct f_val *pres) { - FS_INIT( - .pool = tmp_pool, - ); + filter_state = (struct filter_state) { + .stack = &filter_stack, + .pool = tmp_pool, + }; LOG_BUFFER_INIT(filter_state.buf); @@ -383,9 +381,10 @@ uint f_eval_int(const struct f_line *expr) { /* Called independently in parse-time to eval expressions */ - FS_INIT( - .pool = cfg_mem, - ); + filter_state = (struct filter_state) { + .stack = &filter_stack, + .pool = cfg_mem, + }; struct f_val val; diff --git a/lib/birdlib.h b/lib/birdlib.h index 9743da32..30ea433c 100644 --- a/lib/birdlib.h +++ b/lib/birdlib.h @@ -73,10 +73,8 @@ static inline int u64_cmp(u64 i1, u64 i2) #define UNUSED __attribute__((unused)) #define PACKED __attribute__((packed)) -#ifdef HAVE_THREAD_LOCAL -#define THREAD_LOCAL _Thread_local -#else -#define THREAD_LOCAL +#ifndef HAVE_THREAD_LOCAL +#define _Thread_local #endif /* Microsecond time */