summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2004-04-22 14:07:20 +0000
committerMarc Laukien <marc@zeroc.com>2004-04-22 14:07:20 +0000
commit4a1cf64056015e3758615cf0907ff6aeb2b26e8b (patch)
tree4e10c6b28a3cd1843e3542c1691906051d05b08e /cpp/src
parentAdded array mapping for sequences to Icicle. (diff)
downloadice-4a1cf64056015e3758615cf0907ff6aeb2b26e8b.tar.bz2
ice-4a1cf64056015e3758615cf0907ff6aeb2b26e8b.tar.xz
ice-4a1cf64056015e3758615cf0907ff6aeb2b26e8b.zip
fix
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/Connection.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/cpp/src/Ice/Connection.cpp b/cpp/src/Ice/Connection.cpp
index bb187af20fb..e00fe7c6a50 100644
--- a/cpp/src/Ice/Connection.cpp
+++ b/cpp/src/Ice/Connection.cpp
@@ -1079,6 +1079,7 @@ IceInternal::Connection::read(BasicStream& stream)
void
IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threadPool)
{
+ ServantManagerPtr servantManager;
OutgoingAsyncPtr outAsync;
Int invoke = 0;
Int requestId = 0;
@@ -1156,6 +1157,7 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
traceRequest("received request", stream, _logger, _traceLevels);
stream.read(requestId);
invoke = 1;
+ servantManager = _servantManager;
++_dispatchCount;
}
break;
@@ -1177,6 +1179,7 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
{
throw NegativeSizeException(__FILE__, __LINE__);
}
+ servantManager = _servantManager;
_dispatchCount += invoke;
}
break;
@@ -1328,7 +1331,12 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
os->write(requestId);
}
- in.invoke(_servantManager);
+ //
+ // _servantManager might be changed by setAdapter() during
+ // execution, so we must operate on a copy.
+ //
+ assert(servantManager);
+ in.invoke(servantManager);
//
// If there are more invocations, we need the stream back.