From 2f8ff1f01af2416dce3cda6c6093374d95fc453d Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Thu, 12 Mar 2009 10:26:37 +0100 Subject: - Fixed potential assert when establishing connection for proxies with different endpoint combinations - Added test for connection establishment using proxies with different endpoint combination. - Improved connection establishment to better handle failures when many AMI requests (invoked on different proxies) are queued. The failure is now reported to all pending requests. --- cpp/src/Ice/ConnectionFactory.h | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'cpp/src/Ice/ConnectionFactory.h') diff --git a/cpp/src/Ice/ConnectionFactory.h b/cpp/src/Ice/ConnectionFactory.h index 7bd97ab70e1..89ef6bc514b 100644 --- a/cpp/src/Ice/ConnectionFactory.h +++ b/cpp/src/Ice/ConnectionFactory.h @@ -75,6 +75,7 @@ private: } bool operator<(const ConnectorInfo& other) const; + bool operator==(const ConnectorInfo& other) const; ConnectorPtr connector; EndpointIPtr endpoint; @@ -99,8 +100,15 @@ private: void getConnection(); void nextConnector(); + void setConnection(const Ice::ConnectionIPtr&, bool); + void setException(const Ice::LocalException&); + + bool hasConnector(const ConnectorInfo&); + bool removeConnectors(const std::vector&); + void removeFromPending(); + bool operator<(const ConnectCallback&) const; - + private: const OutgoingConnectionFactoryPtr _factory; @@ -120,7 +128,13 @@ private: void incPendingConnectCount(); void decPendingConnectCount(); Ice::ConnectionIPtr getConnection(const std::vector&, const ConnectCallbackPtr&, bool&); - void finishGetConnection(const std::vector&, const ConnectCallbackPtr&, const Ice::ConnectionIPtr&); + void finishGetConnection(const std::vector&, const ConnectorInfo&, const Ice::ConnectionIPtr&, + const ConnectCallbackPtr&); + void finishGetConnection(const std::vector&, const Ice::LocalException&, const ConnectCallbackPtr&); + + bool addToPending(const ConnectCallbackPtr&, const std::vector&); + void removeFromPending(const ConnectCallbackPtr&, const std::vector&); + Ice::ConnectionIPtr findConnection(const std::vector&, bool&); Ice::ConnectionIPtr createConnection(const TransceiverPtr&, const ConnectorInfo&); -- cgit v1.2.3