From: Jason Ish Date: Wed, 1 Nov 2023 22:57:39 +0000 (-0600) Subject: outputs: call plugin ThreadDeinit, not Deinit X-Git-Tag: suricata-7.0.3~75 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=327c629253a07446294f903e88e57aa1a44be117;p=thirdparty%2Fsuricata.git 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 --- 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);