summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ConnectionFactory.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/ConnectionFactory.h')
-rw-r--r--cpp/src/Ice/ConnectionFactory.h32
1 files changed, 22 insertions, 10 deletions
diff --git a/cpp/src/Ice/ConnectionFactory.h b/cpp/src/Ice/ConnectionFactory.h
index 791c433b0d0..35f99ca073b 100644
--- a/cpp/src/Ice/ConnectionFactory.h
+++ b/cpp/src/Ice/ConnectionFactory.h
@@ -15,7 +15,8 @@
#ifndef ICE_CONNECTION_FACTORY_H
#define ICE_CONNECTION_FACTORY_H
-#include <IceUtil/RecMutex.h>
+#include <IceUtil/Mutex.h>
+#include <IceUtil/Monitor.h>
#include <Ice/ConnectionFactoryF.h>
#include <Ice/ConnectionF.h>
#include <Ice/InstanceF.h>
@@ -38,10 +39,14 @@ class ObjectAdapterI;
namespace IceInternal
{
-class OutgoingConnectionFactory : public ::IceUtil::Shared, public ::IceUtil::Mutex
+class OutgoingConnectionFactory : public ::IceUtil::Shared, public ::IceUtil::Monitor< ::IceUtil::Mutex>
{
public:
+ void destroy();
+
+ void waitUntilFinished();
+
ConnectionPtr create(const std::vector<EndpointPtr>&);
void setRouter(const ::Ice::RouterPrx&);
void removeAdapter(const ::Ice::ObjectAdapterPtr&);
@@ -50,19 +55,22 @@ private:
OutgoingConnectionFactory(const InstancePtr&);
virtual ~OutgoingConnectionFactory();
- void destroy();
friend class Instance;
InstancePtr _instance;
std::map<EndpointPtr, ConnectionPtr> _connections;
};
-class IncomingConnectionFactory : public EventHandler, public ::IceUtil::Mutex
+class IncomingConnectionFactory : public EventHandler, public ::IceUtil::Monitor< ::IceUtil::Mutex>
{
public:
- void hold();
void activate();
+ void hold();
+ void destroy();
+
+ void waitUntilHolding() const;
+ void waitUntilFinished();
EndpointPtr endpoint() const;
bool equivalent(const EndpointPtr&) const;
@@ -82,7 +90,6 @@ private:
IncomingConnectionFactory(const InstancePtr&, const EndpointPtr&, const ::Ice::ObjectAdapterPtr&);
virtual ~IncomingConnectionFactory();
- void destroy();
friend class ::Ice::ObjectAdapterI;
enum State
@@ -96,15 +103,20 @@ private:
void registerWithPool();
void unregisterWithPool();
- const EndpointPtr _endpoint;
- ::Ice::ObjectAdapterPtr _adapter; // Cannot be const, because it must be set to zero to break cyclic dependency.
- const AcceptorPtr _acceptor;
+ AcceptorPtr _acceptor;
const TransceiverPtr _transceiver;
+ const EndpointPtr _endpoint;
+
+ const ::Ice::ObjectAdapterPtr _adapter;
+
const ThreadPoolPtr _serverThreadPool;
+ bool _registeredWithPool;
+
const bool _warn;
+
std::list<ConnectionPtr> _connections;
+
State _state;
- bool _registeredWithPool;
};
}