diff --git a/src/counters.c b/src/counters.c index ec28d2e062..6f2333ce97 100644 --- a/src/counters.c +++ b/src/counters.c @@ -190,6 +190,12 @@ static void SCPerfInitOPCtx(void) sc_counter_tts = (uint32_t) atoi(interval); } + if (!OutputStatsLoggersRegistered()) { + SCLogWarning(SC_WARN_NO_STATS_LOGGERS, "stats are enabled but no loggers are active"); + sc_counter_enabled = FALSE; + SCReturn; + } + /* Store the engine start time */ time(&sc_start_time); diff --git a/src/output-stats.c b/src/output-stats.c index df6fa1b09b..a6752fc5b7 100644 --- a/src/output-stats.c +++ b/src/output-stats.c @@ -222,6 +222,13 @@ void TmModuleStatsLoggerRegister (void) tmm_modules[TMM_STATSLOGGER].cap_flags = 0; } +int OutputStatsLoggersRegistered(void) +{ + if (list != NULL) + return 1; + return 0; +} + void OutputStatsShutdown(void) { OutputStatsLogger *logger = list; diff --git a/src/output-stats.h b/src/output-stats.h index adb3d11761..6ca89f931b 100644 --- a/src/output-stats.h +++ b/src/output-stats.h @@ -48,6 +48,8 @@ int OutputRegisterStatsLogger(const char *name, StatsLogger LogFunc, OutputCtx * void TmModuleStatsLoggerRegister (void); +int OutputStatsLoggersRegistered(void); + void OutputStatsShutdown(void); #endif /* __OUTPUT_STATS_H__ */ diff --git a/src/util-error.c b/src/util-error.c index 8da681ac3d..454f8f3ff2 100644 --- a/src/util-error.c +++ b/src/util-error.c @@ -300,6 +300,7 @@ const char * SCErrorToString(SCError err) CASE_CODE (SC_ERR_PCIE_INIT_FAILED); CASE_CODE (SC_WARN_LUA_SCRIPT); CASE_CODE (SC_ERR_LUA_SCRIPT); + CASE_CODE (SC_WARN_NO_STATS_LOGGERS); } return "UNKNOWN_ERROR"; diff --git a/src/util-error.h b/src/util-error.h index 7d71552905..21fc611160 100644 --- a/src/util-error.h +++ b/src/util-error.h @@ -289,6 +289,7 @@ typedef enum { SC_WARN_NFLOG_SETSOCKOPT, SC_WARN_LUA_SCRIPT, SC_ERR_LUA_SCRIPT, + SC_WARN_NO_STATS_LOGGERS, } SCError; const char *SCErrorToString(SCError);