diff options
Diffstat (limited to 'cpp/src/IceStorm/SubscriberPool.h')
-rw-r--r-- | cpp/src/IceStorm/SubscriberPool.h | 36 |
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 |