diff --git a/src/PriorityQueue.cc b/src/PriorityQueue.cc index 9d5278108b..26d763d79a 100644 --- a/src/PriorityQueue.cc +++ b/src/PriorityQueue.cc @@ -27,7 +27,7 @@ PriorityQueue::~PriorityQueue() PQ_Element* PriorityQueue::Remove() { if ( heap_size == 0 ) - return 0; + return nullptr; PQ_Element* top = heap[0]; @@ -43,7 +43,7 @@ PQ_Element* PriorityQueue::Remove(PQ_Element* e) { if ( e->Offset() < 0 || e->Offset() >= heap_size || heap[e->Offset()] != e ) - return 0; // not in heap + return nullptr; // not in heap e->MinimizeTime(); BubbleUp(e->Offset()); @@ -56,7 +56,7 @@ PQ_Element* PriorityQueue::Remove(PQ_Element* e) return e2; } -int PriorityQueue::Add(PQ_Element* e) +bool PriorityQueue::Add(PQ_Element* e) { SetElement(heap_size, e); @@ -70,10 +70,10 @@ int PriorityQueue::Add(PQ_Element* e) if ( heap_size >= max_heap_size ) return Resize(max_heap_size * 2); else - return 1; + return true; } -int PriorityQueue::Resize(int new_size) +bool PriorityQueue::Resize(int new_size) { PQ_Element** tmp = new PQ_Element*[new_size]; for ( int i = 0; i < max_heap_size; ++i ) @@ -84,7 +84,7 @@ int PriorityQueue::Resize(int new_size) max_heap_size = new_size; - return heap != 0; + return heap != nullptr; } void PriorityQueue::BubbleUp(int bin) diff --git a/src/PriorityQueue.h b/src/PriorityQueue.h index c749f0dabc..0368396836 100644 --- a/src/PriorityQueue.h +++ b/src/PriorityQueue.h @@ -43,20 +43,20 @@ public: // is empty. PQ_Element* Remove(); - // Removes element e. Returns e, or nil if e wasn't in the queue. + // Removes element e. Returns e, or nullptr if e wasn't in the queue. // Note that e will be modified via MinimizeTime(). PQ_Element* Remove(PQ_Element* e); - // Add a new element to the queue. Returns 0 on failure (not enough - // memory to add the element), 1 on success. - int Add(PQ_Element* e); + // Add a new element to the queue. Returns false on failure (not enough + // memory to add the element), true on success. + bool Add(PQ_Element* e); int Size() const { return heap_size; } int PeakSize() const { return peak_heap_size; } uint64_t CumulativeNum() const { return cumulative_num; } protected: - int Resize(int new_size); + bool Resize(int new_size); void BubbleUp(int bin); void BubbleDown(int bin); diff --git a/src/Sessions.cc b/src/Sessions.cc index 2cbee6b227..4f5d6b461a 100644 --- a/src/Sessions.cc +++ b/src/Sessions.cc @@ -1356,7 +1356,7 @@ TimerMgr* NetSessions::LookupTimerMgr(const TimerMgr::Tag* tag, bool create) return 0; // Create new queue for tag. - TimerMgr* mgr = new CQ_TimerMgr(*tag); + TimerMgr* mgr = new PQ_TimerMgr(*tag); DBG_LOG(DBG_TM, "tag %s, creating new non-global timer mgr %p", tag->c_str(), mgr); timer_mgrs.insert(TimerMgrMap::value_type(*tag, mgr)); double t = timer_mgr->Time() + timer_mgr_inactivity_timeout; diff --git a/src/Stats.cc b/src/Stats.cc index f586435b6a..d352d19793 100644 --- a/src/Stats.cc +++ b/src/Stats.cc @@ -175,11 +175,9 @@ void ProfileLogger::Log() stats.nfa_states, stats.dfa_states, stats.computed, stats.mem / 1024)); } - file->Write(fmt("%.06f Timers: current=%d max=%d mem=%dK lag=%.2fs\n", + file->Write(fmt("%.06f Timers: current=%d max=%d lag=%.2fs\n", network_time, timer_mgr->Size(), timer_mgr->PeakSize(), - int(cq_memory_allocation() + - (timer_mgr->Size() * padded_sizeof(ConnectionTimer))) / 1024, network_time - timer_mgr->LastTimestamp())); DNS_Mgr::Stats dstats; @@ -208,7 +206,7 @@ void ProfileLogger::Log() const threading::Manager::msg_stats_list& thread_stats = thread_mgr->GetMsgThreadStats(); for ( threading::Manager::msg_stats_list::const_iterator i = thread_stats.begin(); - i != thread_stats.end(); ++i ) + i != thread_stats.end(); ++i ) { threading::MsgThread::Stats s = i->second; file->Write(fmt("%0.6f %-25s in=%" PRIu64 " out=%" PRIu64 " pending=%" PRIu64 "/%" PRIu64 diff --git a/src/Timer.cc b/src/Timer.cc index 40ac0696f4..838ae6ad08 100644 --- a/src/Timer.cc +++ b/src/Timer.cc @@ -87,8 +87,8 @@ PQ_TimerMgr::~PQ_TimerMgr() void PQ_TimerMgr::Add(Timer* timer) { - DBG_LOG(DBG_TM, "Adding timer %s to TimeMgr %p", - timer_type_to_string(timer->Type()), this); + DBG_LOG(DBG_TM, "Adding timer %s to TimeMgr %p at %.6f", + timer_type_to_string(timer->Type()), this, timer->Time()); // Add the timer even if it's already expired - that way, if // multiple already-added timers are added, they'll still @@ -145,86 +145,3 @@ void PQ_TimerMgr::Remove(Timer* timer) --current_timers[timer->Type()]; delete timer; } - -CQ_TimerMgr::CQ_TimerMgr(const Tag& tag) : TimerMgr(tag) - { - cq = cq_init(60.0, 1.0); - if ( ! cq ) - reporter->InternalError("could not initialize calendar queue"); - } - -CQ_TimerMgr::~CQ_TimerMgr() - { - cq_destroy(cq); - } - -void CQ_TimerMgr::Add(Timer* timer) - { - DBG_LOG(DBG_TM, "Adding timer %s to TimeMgr %p", - timer_type_to_string(timer->Type()), this); - - // Add the timer even if it's already expired - that way, if - // multiple already-added timers are added, they'll still - // execute in sorted order. - double t = timer->Time(); - - if ( t <= 0.0 ) - // Illegal time, which cq_enqueue won't like. For our - // purposes, just treat it as an old time that's already - // expired. - t = network_time; - - if ( cq_enqueue(cq, t, timer) < 0 ) - reporter->InternalError("problem queueing timer"); - - ++current_timers[timer->Type()]; - } - -void CQ_TimerMgr::Expire() - { - double huge_t = 1e20; // larger than any Unix timestamp - for ( Timer* timer = (Timer*) cq_dequeue(cq, huge_t); - timer; timer = (Timer*) cq_dequeue(cq, huge_t) ) - { - DBG_LOG(DBG_TM, "Dispatching timer %s in TimeMgr %p", - timer_type_to_string(timer->Type()), this); - timer->Dispatch(huge_t, 1); - --current_timers[timer->Type()]; - delete timer; - } - } - -int CQ_TimerMgr::DoAdvance(double new_t, int max_expire) - { - Timer* timer; - while ( (num_expired < max_expire || max_expire == 0) && - (timer = (Timer*) cq_dequeue(cq, new_t)) ) - { - last_timestamp = timer->Time(); - DBG_LOG(DBG_TM, "Dispatching timer %s in TimeMgr %p", - timer_type_to_string(timer->Type()), this); - timer->Dispatch(new_t, 0); - --current_timers[timer->Type()]; - delete timer; - ++num_expired; - } - - return num_expired; - } - -unsigned int CQ_TimerMgr::MemoryUsage() const - { - // FIXME. - return 0; - } - -void CQ_TimerMgr::Remove(Timer* timer) - { - // This may fail if we cancel a timer which has already been removed. - // That's ok, but then we mustn't delete the timer. - if ( cq_remove(cq, timer->Time(), timer) ) - { - --current_timers[timer->Type()]; - delete timer; - } - } diff --git a/src/Timer.h b/src/Timer.h index 7c135932b6..21b21fc5ee 100644 --- a/src/Timer.h +++ b/src/Timer.h @@ -7,10 +7,6 @@ #include #include "PriorityQueue.h" -extern "C" { -#include "cq.h" -} - // If you add a timer here, adjust TimerNames in Timer.cc. enum TimerType : uint8_t { TIMER_BACKDOOR, @@ -152,24 +148,4 @@ protected: PriorityQueue* q; }; -class CQ_TimerMgr : public TimerMgr { -public: - explicit CQ_TimerMgr(const Tag& arg_tag); - ~CQ_TimerMgr() override; - - void Add(Timer* timer) override; - void Expire() override; - - int Size() const override { return cq_size(cq); } - int PeakSize() const override { return cq_max_size(cq); } - uint64_t CumulativeNum() const override { return cq_cumulative_num(cq); } - unsigned int MemoryUsage() const; - -protected: - int DoAdvance(double t, int max_expire) override; - void Remove(Timer* timer) override; - - struct cq_handle *cq; -}; - extern TimerMgr* timer_mgr;