diff options
author | Maria Matejka <mq@ucw.cz> | 2022-03-02 10:35:21 +0100 |
---|---|---|
committer | Maria Matejka <mq@ucw.cz> | 2022-03-02 12:13:49 +0100 |
commit | 48bf1322aa141ca6259b26b37551402758cff0cc (patch) | |
tree | b900a58ac1356bf3724cfa226070ff97df3d52d5 /lib | |
parent | 2e8b8bfcc46ec1493f9e0efe9c796b88df85ada4 (diff) |
Introducing an universal temporary linpool flushed after every task
Diffstat (limited to 'lib')
-rw-r--r-- | lib/event.c | 2 | ||||
-rw-r--r-- | lib/mempool.c | 2 | ||||
-rw-r--r-- | lib/resource.c | 1 | ||||
-rw-r--r-- | lib/resource.h | 9 | ||||
-rw-r--r-- | lib/timer.c | 1 |
5 files changed, 15 insertions, 0 deletions
diff --git a/lib/event.c b/lib/event.c index 273447e0..33dc00b0 100644 --- a/lib/event.c +++ b/lib/event.c @@ -157,6 +157,7 @@ ev_run_list(event_list *l) io_log_event(e->hook, e->data); ev_run(e); + tmp_flush(); } return !EMPTY_LIST(*l); @@ -184,6 +185,7 @@ ev_run_list_limited(event_list *l, uint limit) io_log_event(e->hook, e->data); ev_run(e); + tmp_flush(); limit--; } diff --git a/lib/mempool.c b/lib/mempool.c index 90d7c774..169826d4 100644 --- a/lib/mempool.c +++ b/lib/mempool.c @@ -42,6 +42,8 @@ struct linpool { uint chunk_size, threshold, total, total_large; }; +_Thread_local linpool *tmp_linpool; + static void lp_free(resource *); static void lp_dump(resource *); static resource *lp_lookup(resource *, unsigned long); diff --git a/lib/resource.c b/lib/resource.c index 5d4c7780..5636872c 100644 --- a/lib/resource.c +++ b/lib/resource.c @@ -273,6 +273,7 @@ resource_init(void) root_pool.r.class = &pool_class; root_pool.name = "Root"; init_list(&root_pool.inside); + tmp_init(&root_pool); } /** diff --git a/lib/resource.h b/lib/resource.h index 9ec41ed8..0e4c44d8 100644 --- a/lib/resource.h +++ b/lib/resource.h @@ -79,6 +79,15 @@ void lp_flush(linpool *); /* Free everything, but leave linpool */ void lp_save(linpool *m, lp_state *p); /* Save state */ void lp_restore(linpool *m, lp_state *p); /* Restore state */ +extern _Thread_local linpool *tmp_linpool; /* Temporary linpool autoflushed regularily */ + +#define tmp_alloc(sz) lp_alloc(tmp_linpool, sz) +#define tmp_allocu(sz) lp_allocu(tmp_linpool, sz) +#define tmp_allocz(sz) lp_allocz(tmp_linpool, sz) + +#define tmp_init(p) tmp_linpool = lp_new_default(p) +#define tmp_flush() lp_flush(tmp_linpool) + extern const int lp_chunk_size; #define LP_GAS 1024 #define LP_GOOD_SIZE(x) (((x + LP_GAS - 1) & (~(LP_GAS - 1))) - lp_chunk_size) diff --git a/lib/timer.c b/lib/timer.c index 381163d0..c47e0bbc 100644 --- a/lib/timer.c +++ b/lib/timer.c @@ -233,6 +233,7 @@ timers_fire(struct timeloop *loop) io_log_event(t->hook, t->data); t->hook(t); + tmp_flush(); } } |