summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2007-05-22 15:18:08 +0000
committerAndrew Stitcher <astitcher@apache.org>2007-05-22 15:18:08 +0000
commitf646350b5e59ccf49f1253bd55f98d062769f2ee (patch)
treeba8143aa842ced96eaa450cc236a96abdd8b9c05 /cpp/src/qpid/broker
parentb8f00ac2a358a02d0cdae2dc098f2bacb2af44d5 (diff)
downloadqpid-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.cpp4
-rw-r--r--cpp/src/qpid/broker/AutoDelete.h3
-rw-r--r--cpp/src/qpid/broker/Broker.cpp10
-rw-r--r--cpp/src/qpid/broker/BrokerQueue.cpp9
-rw-r--r--cpp/src/qpid/broker/BrokerQueue.h4
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;