diff --git a/include/fluent-bit/flb_scheduler.h b/include/fluent-bit/flb_scheduler.h index 11b526d350f..227d8a5a337 100644 --- a/include/fluent-bit/flb_scheduler.h +++ b/include/fluent-bit/flb_scheduler.h @@ -192,11 +192,14 @@ struct flb_sched_timer_coro { struct cfl_list _head; }; +#define FLB_SCHED_TLS_MAGIC 0x53544350u + /* parameter for timer callback running under a co-routine */ struct flb_sched_timer_coro_cb_params { struct flb_sched_timer_coro *stc; struct flb_config *config; void *data; + uint32_t magic; struct flb_coro *coro; }; @@ -259,6 +262,7 @@ static FLB_INLINE void sched_timer_cb_params_set(struct flb_sched_timer_coro *st params->config = config; params->data = data; params->coro = coro; + params->magic = FLB_SCHED_TLS_MAGIC; FLB_TLS_SET(sched_timer_coro_cb_params, params); co_switch(coro->callee); diff --git a/src/flb_engine.c b/src/flb_engine.c index d7fcd7a6223..6ab1b7d0374 100644 --- a/src/flb_engine.c +++ b/src/flb_engine.c @@ -1228,7 +1228,7 @@ int flb_engine_shutdown(struct flb_config *config) /* scheduler */ sched_params = (struct flb_sched_timer_coro_cb_params *) FLB_TLS_GET(sched_timer_coro_cb_params); - if (sched_params != NULL) { + if (sched_params && sched_params->magic == FLB_SCHED_TLS_MAGIC) { flb_free(sched_params); FLB_TLS_SET(sched_timer_coro_cb_params, NULL); } diff --git a/src/flb_output_thread.c b/src/flb_output_thread.c index bb146665b0c..56b38967775 100644 --- a/src/flb_output_thread.c +++ b/src/flb_output_thread.c @@ -402,7 +402,7 @@ static void output_thread(void *data) } sched_params = (struct flb_sched_timer_coro_cb_params *) FLB_TLS_GET(sched_timer_coro_cb_params); - if (sched_params != NULL) { + if (sched_params != NULL && sched_params->magic == FLB_SCHED_TLS_MAGIC) { flb_free(sched_params); FLB_TLS_SET(sched_timer_coro_cb_params, NULL); }