]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2754 in SNORT/snort3 from ~SPADALKA/snort3:perf_tracker_crash...
authorMichael Altizer (mialtize) <mialtize@cisco.com>
Wed, 3 Mar 2021 23:37:15 +0000 (23:37 +0000)
committerMichael Altizer (mialtize) <mialtize@cisco.com>
Wed, 3 Mar 2021 23:37:15 +0000 (23:37 +0000)
Squashed commit of the following:

commit f5cbcb1e165ad8c3ba18f921c0dd5dc2a656e9d7
Author: Satyajit Padalkar <spadalkar@gmail.com>
Date:   Wed Mar 3 16:52:35 2021 -0500

    perf_monitor: Fix finalizing JSON output files for trackers

src/network_inspectors/perf_monitor/json_formatter.cc
src/network_inspectors/perf_monitor/json_formatter.h
src/network_inspectors/perf_monitor/perf_tracker.cc

index 313e5ef98c1260ae439cd4ca0597b119b35c0cdc..f7d80bf2de8654e07fae00451af065a838c90544 100644 (file)
@@ -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
 
index e9c78e36d1c9727b31fa7f846159c0b35b53793d..1f02d99f2ef8168ede7894eefc26de42c100dc39 100644 (file)
@@ -40,6 +40,7 @@ public:
 
 private:
     bool first_write = true;
+    bool initialized = false;
 };
 
 #endif
index 9ba112d359377a0004f96e530bd65cfd39ea17b2..27c552b9eb92bc21824660ba2dff6a63e2750838 100644 (file)
@@ -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;
+        }
     }
 }