From 327c629253a07446294f903e88e57aa1a44be117 Mon Sep 17 00:00:00 2001 From: Jason Ish Date: Wed, 1 Nov 2023 16:57:39 -0600 Subject: [PATCH] outputs: call plugin ThreadDeinit, not Deinit With the change to the hash table for tracking threaded loggers, this call is now called once per thread, so should be changed to the ThreadDeinit, as that is not longer being called. Then call Deinit for the primary logger. In threaded mode this would be the parent, its just the logger in non-threaded mode. Bug: #6438 --- src/util-logopenfile.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/util-logopenfile.c b/src/util-logopenfile.c index edcd990028..feca63f44a 100644 --- a/src/util-logopenfile.c +++ b/src/util-logopenfile.c @@ -865,8 +865,8 @@ int LogFileFreeCtx(LogFileCtx *lf_ctx) SCReturnInt(0); } - if (lf_ctx->type == LOGFILE_TYPE_PLUGIN) { - lf_ctx->plugin.plugin->Deinit(lf_ctx->plugin.init_data); + if (lf_ctx->type == LOGFILE_TYPE_PLUGIN && lf_ctx->parent != NULL) { + lf_ctx->plugin.plugin->ThreadDeinit(lf_ctx->plugin.init_data, lf_ctx->plugin.thread_data); } if (lf_ctx->threaded) { @@ -902,6 +902,13 @@ int LogFileFreeCtx(LogFileCtx *lf_ctx) OutputUnregisterFileRotationFlag(&lf_ctx->rotation_flag); } + /* Deinitialize output plugins. We only want to call this for the + * parent of threaded output, or always for non-threaded + * output. */ + if (lf_ctx->type == LOGFILE_TYPE_PLUGIN && lf_ctx->parent == NULL) { + lf_ctx->plugin.plugin->Deinit(lf_ctx->plugin.init_data); + } + memset(lf_ctx, 0, sizeof(*lf_ctx)); SCFree(lf_ctx);