summaryrefslogtreecommitdiff
path: root/cpp/src/IceStorm/SubscriberPool.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceStorm/SubscriberPool.h')
-rw-r--r--cpp/src/IceStorm/SubscriberPool.h36
1 files changed, 23 insertions, 13 deletions
diff --git a/cpp/src/IceStorm/SubscriberPool.h b/cpp/src/IceStorm/SubscriberPool.h
index ce6416452db..8f8140bded9 100644
--- a/cpp/src/IceStorm/SubscriberPool.h
+++ b/cpp/src/IceStorm/SubscriberPool.h
@@ -16,7 +16,9 @@
#include <IceUtil/Monitor.h>
#include <IceUtil/Time.h>
#include <IceUtil/Thread.h>
+#include <Ice/Identity.h>
#include <list>
+#include <set>
namespace IceStorm
{
@@ -60,32 +62,40 @@ public:
SubscriberPool(const InstancePtr&);
~SubscriberPool();
- void add(std::list<SubscriberPtr>&);
+ void flush(std::list<SubscriberPtr>&);
+ void add(const SubscriberPtr&);
+ void remove(const SubscriberPtr&);
void destroy();
-private:
-
- friend class SubscriberPoolWorker;
- SubscriberPtr dequeue(const SubscriberPtr&);
- friend class SubscriberPoolMonitor;
+ //
+ // For use by the subscriber worker.
+ //
+ SubscriberPtr dequeue(const SubscriberPtr&, bool, const IceUtil::Time&, bool&);
+ //
+ // For use by the monitor.
+ //
void check();
+private:
+
const InstancePtr _instance;
- const int _sizeMax;
- const int _sizeWarn;
- const int _size;
+ const unsigned int _sizeMax;
+ const unsigned int _sizeWarn;
+ const unsigned int _size;
const IceUtil::Time _timeout;
+ const IceUtil::Time _stallCheck;
SubscriberPoolMonitorPtr _subscriberPoolMonitor;
std::list<SubscriberPtr> _pending;
+ std::list<SubscriberPtr> _subscribers;
bool _destroy;
std::list<IceUtil::ThreadPtr> _workers;
- int _inUse;
- int _running;
- double _load;
+ int _reap;
+ unsigned int _inUse;
- IceUtil::Time _lastNext;
+ IceUtil::Time _lastStallCheck;
+ IceUtil::Time _lastDequeue;
};
} // End namespace IceStorm