summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/AutoDelete.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/broker/AutoDelete.cpp')
-rw-r--r--cpp/src/qpid/broker/AutoDelete.cpp39
1 files changed, 14 insertions, 25 deletions
diff --git a/cpp/src/qpid/broker/AutoDelete.cpp b/cpp/src/qpid/broker/AutoDelete.cpp
index 434bd4a3a0..d96105ba7d 100644
--- a/cpp/src/qpid/broker/AutoDelete.cpp
+++ b/cpp/src/qpid/broker/AutoDelete.cpp
@@ -18,26 +18,23 @@
#include "qpid/broker/AutoDelete.h"
using namespace qpid::broker;
+using namespace qpid::sys;
-AutoDelete::AutoDelete(QueueRegistry* const _registry, u_int32_t _period) : registry(_registry),
- period(_period),
- stopped(true),
- runner(0){}
+AutoDelete::AutoDelete(QueueRegistry* const _registry, u_int32_t _period)
+ : registry(_registry), period(_period), stopped(true) { }
void AutoDelete::add(Queue::shared_ptr const queue){
- lock.acquire();
+ Mutex::ScopedLock l(lock);
queues.push(queue);
- lock.release();
}
Queue::shared_ptr const AutoDelete::pop(){
Queue::shared_ptr next;
- lock.acquire();
+ Mutex::ScopedLock l(lock);
if(!queues.empty()){
next = queues.front();
queues.pop();
}
- lock.release();
return next;
}
@@ -59,35 +56,27 @@ void AutoDelete::process(){
}
void AutoDelete::run(){
- monitor.acquire();
+ Monitor::ScopedLock l(monitor);
while(!stopped){
process();
- monitor.wait(period);
+ monitor.wait(msecsToNsecs(period));
}
- monitor.release();
}
void AutoDelete::start(){
- monitor.acquire();
+ Monitor::ScopedLock l(monitor);
if(stopped){
- runner = factory.create(this);
stopped = false;
- monitor.release();
- runner->start();
- }else{
- monitor.release();
+ runner = Thread(this);
}
}
void AutoDelete::stop(){
- monitor.acquire();
- if(!stopped){
+ {
+ Monitor::ScopedLock l(monitor);
+ if(stopped) return;
stopped = true;
- monitor.notify();
- monitor.release();
- runner->join();
- delete runner;
- }else{
- monitor.release();
}
+ monitor.notify();
+ runner.join();
}