# HG changeset patch # User Alexander Krotov # Date 1471189074 -10800 # Sun Aug 14 18:37:54 2016 +0300 # Node ID e510392247d75336770ad04f4463c11e04f9fc81 # Parent 40a2313c23d166399bcda5b74d676ccecf6f62d8 spectrum: (fixes #2475) Cancel GenerateReport when SpectrumAnalyzer is stopped diff --git a/src/spectrum/model/spectrum-analyzer.cc b/src/spectrum/model/spectrum-analyzer.cc --- a/src/spectrum/model/spectrum-analyzer.cc +++ b/src/spectrum/model/spectrum-analyzer.cc @@ -41,7 +41,7 @@ m_spectrumModel (0), m_sumPowerSpectralDensity (0), m_resolution (MilliSeconds (50)), - m_active (false) + m_reportEvent () { NS_LOG_FUNCTION (this); } @@ -63,6 +63,7 @@ m_spectrumModel = 0; m_sumPowerSpectralDensity = 0; m_energySpectralDensity = 0; + m_reportEvent.Cancel (); SpectrumPhy::DoDispose (); } @@ -208,15 +209,12 @@ (*avgPowerSpectralDensity) += m_noisePowerSpectralDensity; (*m_energySpectralDensity) = 0; + m_reportEvent = Simulator::Schedule (m_resolution, &SpectrumAnalyzer::GenerateReport, this); + NS_LOG_INFO ("generating report"); m_averagePowerSpectralDensityReportTrace (avgPowerSpectralDensity); *avgPowerSpectralDensity = 0; - - if (m_active) - { - Simulator::Schedule (m_resolution, &SpectrumAnalyzer::GenerateReport, this); - } } @@ -239,11 +237,9 @@ SpectrumAnalyzer::Start () { NS_LOG_FUNCTION (this); - if (!m_active) + if (!m_reportEvent.IsRunning ()) { - NS_LOG_LOGIC ("activating"); - m_active = true; - Simulator::Schedule (m_resolution, &SpectrumAnalyzer::GenerateReport, this); + m_reportEvent = Simulator::Schedule (m_resolution, &SpectrumAnalyzer::GenerateReport, this); } } @@ -251,7 +247,7 @@ void SpectrumAnalyzer::Stop () { - m_active = false; + m_reportEvent.Cancel (); } } // namespace ns3 diff --git a/src/spectrum/model/spectrum-analyzer.h b/src/spectrum/model/spectrum-analyzer.h --- a/src/spectrum/model/spectrum-analyzer.h +++ b/src/spectrum/model/spectrum-analyzer.h @@ -131,7 +131,7 @@ double m_noisePowerSpectralDensity; //!< Noise power spectral density Time m_resolution; //!< Time resolution Time m_lastChangeTime; //!< When the last update happened - bool m_active; //!< True if the analyzer is active + EventId m_reportEvent; //!< Report event /// TracedCallback - average power spectral density report. TracedCallback > m_averagePowerSpectralDensityReportTrace;