summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Reference.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2007-01-25 16:50:20 +0000
committerMark Spruiell <mes@zeroc.com>2007-01-25 16:50:20 +0000
commit2af1be4b75d36ed2022c304c9030ff34162d44db (patch)
tree229182241b85b3dd9b57cf56a02e774b83fcd47a /cpp/src/Ice/Reference.cpp
parentIceGrid file cache fixes (diff)
downloadice-2af1be4b75d36ed2022c304c9030ff34162d44db.tar.bz2
ice-2af1be4b75d36ed2022c304c9030ff34162d44db.tar.xz
ice-2af1be4b75d36ed2022c304c9030ff34162d44db.zip
adding thread-per-connection settings for proxies & OAs
Diffstat (limited to 'cpp/src/Ice/Reference.cpp')
-rw-r--r--cpp/src/Ice/Reference.cpp65
1 files changed, 55 insertions, 10 deletions
diff --git a/cpp/src/Ice/Reference.cpp b/cpp/src/Ice/Reference.cpp
index 9846f91e86b..2bd51e2da2d 100644
--- a/cpp/src/Ice/Reference.cpp
+++ b/cpp/src/Ice/Reference.cpp
@@ -492,6 +492,12 @@ IceInternal::FixedReference::getEndpointSelection() const
return Random;
}
+bool
+IceInternal::FixedReference::getThreadPerConnection() const
+{
+ return false;
+}
+
ReferencePtr
IceInternal::FixedReference::changeSecure(bool) const
{
@@ -586,6 +592,13 @@ IceInternal::FixedReference::changeEndpointSelection(EndpointSelectionType) cons
return 0; // Keep the compiler happy.
}
+ReferencePtr
+IceInternal::FixedReference::changeThreadPerConnection(bool) const
+{
+ throw FixedProxyException(__FILE__, __LINE__);
+ return 0; // Keep the compiler happy.
+}
+
void
IceInternal::FixedReference::streamWrite(BasicStream* s) const
{
@@ -783,6 +796,12 @@ IceInternal::RoutableReference::getEndpointSelection() const
return _endpointSelection;
}
+bool
+IceInternal::RoutableReference::getThreadPerConnection() const
+{
+ return _threadPerConnection;
+}
+
ReferencePtr
IceInternal::RoutableReference::changeSecure(bool newSecure) const
{
@@ -894,6 +913,18 @@ IceInternal::RoutableReference::changeEndpointSelection(EndpointSelectionType ne
return r;
}
+ReferencePtr
+IceInternal::RoutableReference::changeThreadPerConnection(bool newValue) const
+{
+ if(newValue == _threadPerConnection)
+ {
+ return RoutableReferencePtr(const_cast<RoutableReference*>(this));
+ }
+ RoutableReferencePtr r = RoutableReferencePtr::dynamicCast(getInstance()->referenceFactory()->copy(this));
+ r->_threadPerConnection = newValue;
+ return r;
+}
+
int
IceInternal::RoutableReference::hash() const
{
@@ -944,6 +975,10 @@ IceInternal::RoutableReference::operator==(const Reference& r) const
{
return false;
}
+ if(_threadPerConnection != rhs->_threadPerConnection)
+ {
+ return false;
+ }
return _routerInfo == rhs->_routerInfo;
}
@@ -1054,6 +1089,14 @@ IceInternal::RoutableReference::operator<(const Reference& r) const
return false;
}
}
+ if(!_threadPerConnection && rhs->_threadPerConnection)
+ {
+ return true;
+ }
+ else if(rhs->_threadPerConnection < _threadPerConnection)
+ {
+ return false;
+ }
return _routerInfo < rhs->_routerInfo;
}
return false;
@@ -1073,7 +1116,8 @@ IceInternal::RoutableReference::RoutableReference(const InstancePtr& inst, const
_overrideCompress(false),
_compress(false),
_overrideTimeout(false),
- _timeout(-1)
+ _timeout(-1),
+ _threadPerConnection(inst->threadPerConnection())
{
}
@@ -1089,7 +1133,8 @@ IceInternal::RoutableReference::RoutableReference(const RoutableReference& r) :
_overrideCompress(r._overrideCompress),
_compress(r._compress),
_overrideTimeout(r._overrideTimeout),
- _timeout(r._timeout)
+ _timeout(r._timeout),
+ _threadPerConnection(r._threadPerConnection)
{
}
@@ -1205,7 +1250,7 @@ IceInternal::RoutableReference::createConnection(const vector<EndpointIPtr>& all
// Get an existing connection or create one if there's no
// existing connection to one of the given endpoints.
//
- return factory->create(endpoints, false, comp);
+ return factory->create(endpoints, false, _threadPerConnection, comp);
}
else
{
@@ -1226,7 +1271,7 @@ IceInternal::RoutableReference::createConnection(const vector<EndpointIPtr>& all
try
{
endpoint.back() = *p;
- return factory->create(endpoint, p + 1 == endpoints.end(), comp);
+ return factory->create(endpoint, p + 1 == endpoints.end(), _threadPerConnection, comp);
}
catch(const LocalException& ex)
{
@@ -1348,6 +1393,12 @@ IceInternal::DirectReference::changeConnectionId(const string& newConnectionId)
}
ReferencePtr
+IceInternal::DirectReference::changeLocatorCacheTimeout(int) const
+{
+ return DirectReferencePtr(const_cast<DirectReference*>(this));
+}
+
+ReferencePtr
IceInternal::DirectReference::changeAdapterId(const string& newAdapterId) const
{
if(!newAdapterId.empty())
@@ -1378,12 +1429,6 @@ IceInternal::DirectReference::changeEndpoints(const vector<EndpointIPtr>& newEnd
return r;
}
-ReferencePtr
-IceInternal::DirectReference::changeLocatorCacheTimeout(int) const
-{
- return DirectReferencePtr(const_cast<DirectReference*>(this));
-}
-
void
IceInternal::DirectReference::streamWrite(BasicStream* s) const
{