summaryrefslogtreecommitdiff
path: root/qpid/cpp/src/qpid/broker/Connection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/src/qpid/broker/Connection.cpp')
-rw-r--r--qpid/cpp/src/qpid/broker/Connection.cpp51
1 files changed, 19 insertions, 32 deletions
diff --git a/qpid/cpp/src/qpid/broker/Connection.cpp b/qpid/cpp/src/qpid/broker/Connection.cpp
index 91c95289ac..a1a3c6ada7 100644
--- a/qpid/cpp/src/qpid/broker/Connection.cpp
+++ b/qpid/cpp/src/qpid/broker/Connection.cpp
@@ -49,35 +49,25 @@ namespace _qmf = qmf::org::apache::qpid::broker;
namespace qpid {
namespace broker {
-struct ConnectionTimeoutTask : public TimerTask {
- Timer& timer;
+struct ConnectionTimeoutTask : public sys::TimerTask {
+ sys::Timer& timer;
Connection& connection;
- AbsTime expires;
- ConnectionTimeoutTask(uint16_t hb, Timer& t, Connection& c) :
+ ConnectionTimeoutTask(uint16_t hb, sys::Timer& t, Connection& c) :
TimerTask(Duration(hb*2*TIME_SEC)),
timer(t),
- connection(c),
- expires(AbsTime::now(), duration)
+ connection(c)
{}
- void touch()
- {
- expires = AbsTime(AbsTime::now(), duration);
+ void touch() {
+ restart();
}
void fire() {
- // This is the best we can currently do to avoid a destruction/fire race
- if (isCancelled()) return;
- if (expires < AbsTime::now()) {
- // If we get here then we've not received any traffic in the timeout period
- // Schedule closing the connection for the io thread
- QPID_LOG(error, "Connection timed out: closing");
- connection.abort();
- } else {
- reset();
- timer.add(this);
- }
+ // If we get here then we've not received any traffic in the timeout period
+ // Schedule closing the connection for the io thread
+ QPID_LOG(error, "Connection timed out: closing");
+ connection.abort();
}
};
@@ -338,25 +328,22 @@ void Connection::setSecureConnection(SecureConnection* s)
adapter.setSecureConnection(s);
}
-struct ConnectionHeartbeatTask : public TimerTask {
- Timer& timer;
+struct ConnectionHeartbeatTask : public sys::TimerTask {
+ sys::Timer& timer;
Connection& connection;
- ConnectionHeartbeatTask(uint16_t hb, Timer& t, Connection& c) :
+ ConnectionHeartbeatTask(uint16_t hb, sys::Timer& t, Connection& c) :
TimerTask(Duration(hb*TIME_SEC)),
timer(t),
connection(c)
{}
void fire() {
- // This is the best we can currently do to avoid a destruction/fire race
- if (!isCancelled()) {
- // Setup next firing
- reset();
- timer.add(this);
-
- // Send Heartbeat
- connection.sendHeartbeat();
- }
+ // Setup next firing
+ setupNextFire();
+ timer.add(this);
+
+ // Send Heartbeat
+ connection.sendHeartbeat();
}
};