diff options
-rw-r--r-- | qpid/cpp/src/qpid/broker/Timer.cpp | 8 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/Timer.h | 4 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/sys/Time.h | 6 |
3 files changed, 15 insertions, 3 deletions
diff --git a/qpid/cpp/src/qpid/broker/Timer.cpp b/qpid/cpp/src/qpid/broker/Timer.cpp index f721ba5ef5..653e1dffd1 100644 --- a/qpid/cpp/src/qpid/broker/Timer.cpp +++ b/qpid/cpp/src/qpid/broker/Timer.cpp @@ -27,9 +27,10 @@ using qpid::sys::Monitor; using qpid::sys::Thread; using namespace qpid::broker; -TimerTask::TimerTask(Duration timeout) : time(AbsTime::now(), timeout), cancelled(false) {} -TimerTask::TimerTask(AbsTime _time) : time(_time), cancelled(false) {} +TimerTask::TimerTask(Duration timeout) : duration(timeout), time(AbsTime::now(), timeout), cancelled(false) {} +TimerTask::TimerTask(AbsTime _time) : duration(0), time(_time), cancelled(false) {} TimerTask::~TimerTask(){} +void TimerTask::reset() { time.reset(AbsTime::now(), duration); } Timer::Timer() : active(false) { @@ -82,6 +83,7 @@ void Timer::stop() signalStop(); runner.join(); } + void Timer::signalStop() { Monitor::ScopedLock l(monitor); @@ -110,6 +112,7 @@ TimerA::~TimerA() { stop(); } + void TimerA::run() { Monitor::ScopedLock l(monitor); @@ -157,6 +160,7 @@ void TimerA::stop() signalStop(); runner.join(); } + void TimerA::signalStop() { Monitor::ScopedLock l(monitor); diff --git a/qpid/cpp/src/qpid/broker/Timer.h b/qpid/cpp/src/qpid/broker/Timer.h index eaa9192bec..aa17525f95 100644 --- a/qpid/cpp/src/qpid/broker/Timer.h +++ b/qpid/cpp/src/qpid/broker/Timer.h @@ -34,14 +34,16 @@ namespace broker { struct TimerTask { + const qpid::sys::Duration duration; typedef boost::shared_ptr<TimerTask> shared_ptr; - const qpid::sys::AbsTime time; + qpid::sys::AbsTime time; volatile bool cancelled; TimerTask(qpid::sys::Duration timeout); TimerTask(qpid::sys::AbsTime time); virtual ~TimerTask(); + void reset(); virtual void fire() = 0; }; diff --git a/qpid/cpp/src/qpid/sys/Time.h b/qpid/cpp/src/qpid/sys/Time.h index cff5b70d8e..9c9b3de5c2 100644 --- a/qpid/cpp/src/qpid/sys/Time.h +++ b/qpid/cpp/src/qpid/sys/Time.h @@ -42,6 +42,7 @@ class AbsTime { inline AbsTime(const AbsTime& time0, const Duration& duration); // Default asignment operation fine // Default copy constructor fine + inline void reset(const AbsTime& time0, const Duration& duration); static AbsTime now(); inline static AbsTime FarFuture(); @@ -68,6 +69,11 @@ AbsTime::AbsTime(const AbsTime& t, const Duration& d) : time_ns(d == Duration::max() ? max() : t.time_ns+d.nanosecs) {} +void AbsTime::reset(const AbsTime& t, const Duration& d) +{ + time_ns = d == Duration::max() ? max() : t.time_ns+d.nanosecs; +} + AbsTime AbsTime::FarFuture() { AbsTime ff; ff.time_ns = max(); return ff;} inline AbsTime now() { return AbsTime::now(); } |