From: Michael Altizer (mialtize) Date: Wed, 3 Mar 2021 23:37:15 +0000 (+0000) Subject: Merge pull request #2754 in SNORT/snort3 from ~SPADALKA/snort3:perf_tracker_crash... X-Git-Tag: 3.1.2.0~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9324b65441524ab55fcf2bf35ab5854ede3d5174;p=thirdparty%2Fsnort3.git Merge pull request #2754 in SNORT/snort3 from ~SPADALKA/snort3:perf_tracker_crash to master Squashed commit of the following: commit f5cbcb1e165ad8c3ba18f921c0dd5dc2a656e9d7 Author: Satyajit Padalkar Date: Wed Mar 3 16:52:35 2021 -0500 perf_monitor: Fix finalizing JSON output files for trackers --- diff --git a/src/network_inspectors/perf_monitor/json_formatter.cc b/src/network_inspectors/perf_monitor/json_formatter.cc index 313e5ef98..f7d80bf2d 100644 --- a/src/network_inspectors/perf_monitor/json_formatter.cc +++ b/src/network_inspectors/perf_monitor/json_formatter.cc @@ -32,6 +32,7 @@ void JSONFormatter::init_output(FILE* fh) { fwrite("[", 1, 1, fh); first_write = true; + initialized = true; } void JSONFormatter::write(FILE* fh, time_t cur_time) @@ -126,7 +127,13 @@ void JSONFormatter::write(FILE* fh, time_t cur_time) } void JSONFormatter::finalize_output(FILE* fh) -{ fwrite("]\n", 2, 1, fh); } +{ + if ( initialized ) + { + fwrite("]\n", 2, 1, fh); + initialized = false; + } +} #ifdef CATCH_TEST_BUILD diff --git a/src/network_inspectors/perf_monitor/json_formatter.h b/src/network_inspectors/perf_monitor/json_formatter.h index e9c78e36d..1f02d99f2 100644 --- a/src/network_inspectors/perf_monitor/json_formatter.h +++ b/src/network_inspectors/perf_monitor/json_formatter.h @@ -40,6 +40,7 @@ public: private: bool first_write = true; + bool initialized = false; }; #endif diff --git a/src/network_inspectors/perf_monitor/perf_tracker.cc b/src/network_inspectors/perf_monitor/perf_tracker.cc index 9ba112d35..27c552b9e 100644 --- a/src/network_inspectors/perf_monitor/perf_tracker.cc +++ b/src/network_inspectors/perf_monitor/perf_tracker.cc @@ -92,19 +92,21 @@ PerfTracker::PerfTracker(PerfConfig* config, const char* tracker_name) PerfTracker::~PerfTracker() { - formatter->finalize_output(fh); - delete formatter; + close(); - if (fh && fh != stdout) - fclose(fh); + delete formatter; } void PerfTracker::close() { - if (fh && fh != stdout) + if (fh) { - fclose(fh); - fh = nullptr; + formatter->finalize_output(fh); + if (fh != stdout) + { + fclose(fh); + fh = nullptr; + } } }