diff options
| author | Andrew Stitcher <astitcher@apache.org> | 2007-05-22 15:18:08 +0000 |
|---|---|---|
| committer | Andrew Stitcher <astitcher@apache.org> | 2007-05-22 15:18:08 +0000 |
| commit | f646350b5e59ccf49f1253bd55f98d062769f2ee (patch) | |
| tree | ba8143aa842ced96eaa450cc236a96abdd8b9c05 /cpp/src/qpid/broker | |
| parent | b8f00ac2a358a02d0cdae2dc098f2bacb2af44d5 (diff) | |
| download | qpid-python-f646350b5e59ccf49f1253bd55f98d062769f2ee.tar.gz | |
* Split apart platform (threading etc.) from network io
you can now use a posix platform implementation by configuring
--disable-apr-platform
* Changed Time classes to distinguish between absolute times (AbsTime)
and durations (Duration). This should avoid bugs caused by confusing
the two types of time.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@540608 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker')
| -rw-r--r-- | cpp/src/qpid/broker/AutoDelete.cpp | 4 | ||||
| -rw-r--r-- | cpp/src/qpid/broker/AutoDelete.h | 3 | ||||
| -rw-r--r-- | cpp/src/qpid/broker/Broker.cpp | 10 | ||||
| -rw-r--r-- | cpp/src/qpid/broker/BrokerQueue.cpp | 9 | ||||
| -rw-r--r-- | cpp/src/qpid/broker/BrokerQueue.h | 4 |
5 files changed, 17 insertions, 13 deletions
diff --git a/cpp/src/qpid/broker/AutoDelete.cpp b/cpp/src/qpid/broker/AutoDelete.cpp index bfdb8decd2..8f1f38b184 100644 --- a/cpp/src/qpid/broker/AutoDelete.cpp +++ b/cpp/src/qpid/broker/AutoDelete.cpp @@ -25,7 +25,7 @@ using namespace qpid::broker; using namespace qpid::sys; AutoDelete::AutoDelete(QueueRegistry* const _registry, uint32_t _period) - : registry(_registry), period(_period), stopped(true) { } + : registry(_registry), period(_period*TIME_MSEC), stopped(true) { } void AutoDelete::add(Queue::shared_ptr const queue){ Mutex::ScopedLock l(lock); @@ -63,7 +63,7 @@ void AutoDelete::run(){ Monitor::ScopedLock l(monitor); while(!stopped){ process(); - monitor.wait(period*TIME_MSEC); + monitor.wait(AbsTime(now(), period)); } } diff --git a/cpp/src/qpid/broker/AutoDelete.h b/cpp/src/qpid/broker/AutoDelete.h index 24e9c18a68..d4d0f84f4b 100644 --- a/cpp/src/qpid/broker/AutoDelete.h +++ b/cpp/src/qpid/broker/AutoDelete.h @@ -26,6 +26,7 @@ #include "BrokerQueue.h" #include "QueueRegistry.h" #include "qpid/sys/Thread.h" +#include "qpid/sys/Runnable.h" namespace qpid { namespace broker{ @@ -34,7 +35,7 @@ namespace qpid { qpid::sys::Monitor monitor; std::queue<Queue::shared_ptr> queues; QueueRegistry* const registry; - uint32_t period; + sys::Duration period; volatile bool stopped; qpid::sys::Thread runner; diff --git a/cpp/src/qpid/broker/Broker.cpp b/cpp/src/qpid/broker/Broker.cpp index c5e5f82613..de2f2c55f4 100644 --- a/cpp/src/qpid/broker/Broker.cpp +++ b/cpp/src/qpid/broker/Broker.cpp @@ -18,8 +18,8 @@ * under the License. * */ -#include <iostream> -#include <memory> + +#include "Broker.h" #include "qpid/framing/AMQFrame.h" #include "DirectExchange.h" @@ -31,11 +31,15 @@ #include "qpid/framing/ProtocolInitiation.h" #include "RecoveryManagerImpl.h" #include "Connection.h" +#include "qpid/sys/Acceptor.h" #include "qpid/sys/ConnectionInputHandler.h" #include "qpid/sys/ConnectionInputHandlerFactory.h" #include "qpid/sys/TimeoutHandler.h" -#include "Broker.h" +#include <iostream> +#include <memory> + +using qpid::sys::Acceptor; namespace qpid { namespace broker { diff --git a/cpp/src/qpid/broker/BrokerQueue.cpp b/cpp/src/qpid/broker/BrokerQueue.cpp index 34c8d79e76..0fbff0f8fd 100644 --- a/cpp/src/qpid/broker/BrokerQueue.cpp +++ b/cpp/src/qpid/broker/BrokerQueue.cpp @@ -44,11 +44,10 @@ Queue::Queue(const string& _name, uint32_t _autodelete, queueing(false), dispatching(false), next(0), - lastUsed(0), exclusive(0), persistenceId(0) { - if(autodelete) lastUsed = now()/TIME_MSEC; + if(autodelete) lastUsed = now(); } Queue::~Queue(){} @@ -135,7 +134,7 @@ void Queue::consume(Consumer* c, bool requestExclusive){ "Exclusive access denied.") %getName()); exclusive = c; } - if(autodelete && consumers.empty()) lastUsed = 0; + if(autodelete && consumers.empty()) lastUsed = FAR_FUTURE; consumers.push_back(c); } @@ -144,7 +143,7 @@ void Queue::cancel(Consumer* c){ Consumers::iterator i = std::find(consumers.begin(), consumers.end(), c); if (i != consumers.end()) consumers.erase(i); - if(autodelete && consumers.empty()) lastUsed = now()*TIME_MSEC; + if(autodelete && consumers.empty()) lastUsed = now(); if(exclusive == c) exclusive = 0; } @@ -193,7 +192,7 @@ uint32_t Queue::getConsumerCount() const{ bool Queue::canAutoDelete() const{ Mutex::ScopedLock locker(lock); - return lastUsed && (now()*TIME_MSEC - lastUsed > autodelete); + return Duration(lastUsed, now()) > autodelete; } void Queue::enqueue(TransactionContext* ctxt, Message::shared_ptr& msg) diff --git a/cpp/src/qpid/broker/BrokerQueue.h b/cpp/src/qpid/broker/BrokerQueue.h index c45b35566e..e1e69cbc60 100644 --- a/cpp/src/qpid/broker/BrokerQueue.h +++ b/cpp/src/qpid/broker/BrokerQueue.h @@ -58,7 +58,7 @@ namespace qpid { typedef std::queue<Message::shared_ptr> Messages; const string name; - const uint32_t autodelete; + const sys::Duration autodelete; MessageStore* const store; const ConnectionToken* const owner; Consumers consumers; @@ -67,7 +67,7 @@ namespace qpid { bool dispatching; int next; mutable qpid::sys::Mutex lock; - int64_t lastUsed; + sys::AbsTime lastUsed; Consumer* exclusive; mutable uint64_t persistenceId; framing::FieldTable settings; |
