From fbe33d4ee908da06060536d9a888c95ad6427c1b Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Tue, 3 May 2022 10:42:25 -0700 Subject: [PATCH] memory management fixes for loggers --- src/RunState.cc | 3 +-- src/Stats.h | 17 +++++++++-------- src/zeek-setup.cc | 11 +++++------ 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/RunState.cc b/src/RunState.cc index 76ac99e79d..7c24ee18c4 100644 --- a/src/RunState.cc +++ b/src/RunState.cc @@ -251,7 +251,7 @@ void dispatch_packet(Packet* pkt, iosource::PktSrc* pkt_src) // charged against this sample. event_mgr.Drain(); - zeek::detail::sample_logger = new zeek::detail::SampleLogger(); + zeek::detail::sample_logger = std::make_shared(); sp = new zeek::detail::SegmentProfiler(zeek::detail::sample_logger, "load-samp"); } } @@ -262,7 +262,6 @@ void dispatch_packet(Packet* pkt, iosource::PktSrc* pkt_src) if ( sp ) { delete sp; - delete zeek::detail::sample_logger; zeek::detail::sample_logger = nullptr; } diff --git a/src/Stats.h b/src/Stats.h index ab3a2f6fa8..dd1d3e7418 100644 --- a/src/Stats.h +++ b/src/Stats.h @@ -8,6 +8,7 @@ #include #include #include +#include namespace zeek { @@ -41,15 +42,15 @@ class SegmentProfiler { public: // The constructor takes some way of identifying the segment. - SegmentProfiler(SegmentStatsReporter* arg_reporter, const char* arg_name) - : reporter(arg_reporter), name(arg_name), loc(), initial_rusage() + SegmentProfiler(std::shared_ptr arg_reporter, const char* arg_name) + : reporter(std::move(arg_reporter)), name(arg_name), loc(), initial_rusage() { if ( reporter ) Init(); } - SegmentProfiler(SegmentStatsReporter* arg_reporter, const Location* arg_loc) - : reporter(arg_reporter), name(), loc(arg_loc), initial_rusage() + SegmentProfiler(std::shared_ptr arg_reporter, const Location* arg_loc) + : reporter(std::move(arg_reporter)), name(), loc(arg_loc), initial_rusage() { if ( reporter ) Init(); @@ -65,7 +66,7 @@ protected: void Init(); void Report(); - SegmentStatsReporter* reporter; + std::shared_ptr reporter; const char* name; const Location* loc; struct rusage initial_rusage; @@ -106,9 +107,9 @@ protected: TableVal* load_samples; }; -extern ProfileLogger* profiling_logger; -extern ProfileLogger* segment_logger; -extern SampleLogger* sample_logger; +extern std::shared_ptr profiling_logger; +extern std::shared_ptr segment_logger; +extern std::shared_ptr sample_logger; // Connection statistics. extern uint64_t killed_by_inactivity; diff --git a/src/zeek-setup.cc b/src/zeek-setup.cc index 7a6b048571..d483866350 100644 --- a/src/zeek-setup.cc +++ b/src/zeek-setup.cc @@ -193,9 +193,9 @@ zeek::detail::trigger::Manager* zeek::detail::trigger_mgr = nullptr; std::vector zeek::detail::zeek_script_prefixes; zeek::detail::Stmt* zeek::detail::stmts = nullptr; zeek::EventRegistry* zeek::event_registry = nullptr; -zeek::detail::ProfileLogger* zeek::detail::profiling_logger = nullptr; -zeek::detail::ProfileLogger* zeek::detail::segment_logger = nullptr; -zeek::detail::SampleLogger* zeek::detail::sample_logger = nullptr; +std::shared_ptr zeek::detail::profiling_logger; +std::shared_ptr zeek::detail::segment_logger; +std::shared_ptr zeek::detail::sample_logger; zeek::detail::FragmentManager* zeek::detail::fragment_mgr = nullptr; @@ -403,8 +403,6 @@ static void terminate_zeek() // allocation code when killing Zeek. Disabling this for now. if ( ! (signal_val == SIGTERM || signal_val == SIGINT) ) profiling_logger->Log(); - - delete profiling_logger; } event_mgr.Drain(); @@ -976,7 +974,8 @@ SetupResult setup(int argc, char** argv, Options* zopts) if ( profiling_interval > 0 ) { const auto& profiling_file = id::find_val("profiling_file"); - profiling_logger = new ProfileLogger(profiling_file->AsFile(), profiling_interval); + profiling_logger = std::make_shared(profiling_file->AsFile(), + profiling_interval); if ( segment_profiling ) segment_logger = profiling_logger;