From a4577e9015dc7a15a2da4a20964dc3eecd734716 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Ondr=C3=A1=C4=8Dek?= Date: Wed, 29 May 2024 18:37:48 +0200 Subject: [PATCH] rrl: broken async in defer --- daemon/defer.c | 26 ++++++++++++++++++++------ daemon/defer.h | 2 +- daemon/main.c | 2 +- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/daemon/defer.c b/daemon/defer.c index 66b266708..ea204b7af 100644 --- a/daemon/defer.c +++ b/daemon/defer.c @@ -1,28 +1,42 @@ #include "daemon/defer.h" #include "lib/kru.h" -// TODO: move kru_defer to another file - #include "daemon/session2.h" +uv_check_t check_handle; + defer_sample_state_t defer_sample_state = { .do_sample = true, // FIXME: start with false, set to true based on config when opening KRU .is_accounting = 0, }; +struct protolayer_iter_ctx *defer_ctx = NULL; + + static enum protolayer_iter_cb_result pl_defer_unwrap( void *sess_data, void *iter_data, struct protolayer_iter_ctx *ctx) { - kr_log_notice(DEVEL, "DEFER: %s\n", - kr_straddr(&defer_sample_state.addr.ip)); + if (!defer_ctx) { + defer_ctx = ctx; + return protolayer_async(); + } return protolayer_continue(ctx); - //return protolayer_async(); } -void defer_init(void) { + +static void defer_queues_check(uv_check_t *handle) { + if (defer_ctx) { + protolayer_continue(defer_ctx); + defer_ctx = NULL; + } +} + +void defer_init(uv_loop_t *loop) { protolayer_globals[PROTOLAYER_TYPE_DEFER].unwrap = pl_defer_unwrap; + uv_check_init(loop, &check_handle); + uv_check_start(&check_handle, defer_queues_check); } diff --git a/daemon/defer.h b/daemon/defer.h index 32f7da7be..d605503be 100644 --- a/daemon/defer.h +++ b/daemon/defer.h @@ -75,4 +75,4 @@ static inline void defer_sample_stop(void) } -void defer_init(void); +void defer_init(uv_loop_t *loop); diff --git a/daemon/main.c b/daemon/main.c index c21c2f4b9..ee53163fd 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -589,7 +589,7 @@ int main(int argc, char **argv) io_protolayers_init(); tls_protolayers_init(); proxy_protolayers_init(); - defer_init(); + defer_init(loop); #ifdef ENABLE_DOH2 http_protolayers_init(); #endif -- 2.47.2