From c7b2714b6b6ad24da21e1956163e3f143457fa7f Mon Sep 17 00:00:00 2001 From: "Carl C. Trieloff" Date: Fri, 29 Jun 2007 21:16:17 +0000 Subject: Updated AutoDelete, now only run when auto delete queues exist and additional auto delete queues being declared. cuts 1-3% of CPU time for concurrent publisher run. Could do with some more auto delete tests... git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@552037 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/AutoDelete.cpp | 43 +++++++++++++------------------------- 1 file changed, 15 insertions(+), 28 deletions(-) (limited to 'cpp/src/qpid/broker/AutoDelete.cpp') diff --git a/cpp/src/qpid/broker/AutoDelete.cpp b/cpp/src/qpid/broker/AutoDelete.cpp index 45ce12c036..6fa3bfbebf 100644 --- a/cpp/src/qpid/broker/AutoDelete.cpp +++ b/cpp/src/qpid/broker/AutoDelete.cpp @@ -25,12 +25,12 @@ using namespace qpid::broker; using namespace qpid::sys; -AutoDelete::AutoDelete(QueueRegistry* const _registry, uint32_t _period) - : registry(_registry), period(_period*TIME_MSEC), stopped(true) { } +AutoDelete::AutoDelete(QueueRegistry* const _registry, uint32_t _water_mark) + : registry(_registry), high_water_mark(_water_mark), water_mark(0) { } void AutoDelete::add(Queue::shared_ptr const queue){ - Mutex::ScopedLock l(lock); - queues.push(queue); + Mutex::ScopedLock l(lock); + queues.push(queue); } Queue::shared_ptr const AutoDelete::pop(){ @@ -43,7 +43,15 @@ Queue::shared_ptr const AutoDelete::pop(){ return next; } -void AutoDelete::process(){ +void AutoDelete::clean(){ + if (water_mark++ < high_water_mark) + return; + water_mark =0; + cleanNow(); +} + + +void AutoDelete::cleanNow(){ Queue::shared_ptr seen; for(Queue::shared_ptr q = pop(); q; q = pop()){ if(seen == q){ @@ -58,30 +66,9 @@ void AutoDelete::process(){ if(!seen) seen = q; } } + } -void AutoDelete::run(){ - Monitor::ScopedLock l(monitor); - while(!stopped){ - process(); - monitor.wait(AbsTime(now(), period)); - } -} -void AutoDelete::start(){ - Monitor::ScopedLock l(monitor); - if(stopped){ - stopped = false; - runner = Thread(this); - } -} -void AutoDelete::stop(){ - { - Monitor::ScopedLock l(monitor); - if(stopped) return; - stopped = true; - } - monitor.notify(); - runner.join(); -} + -- cgit v1.2.1