summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2002-12-14 22:19:03 +0000
committerMarc Laukien <marc@zeroc.com>2002-12-14 22:19:03 +0000
commita41bb120db0ccdea5eea58e26bd30eddaff40877 (patch)
tree955f720fb895739a61764d56234ac4a9595a1441 /cpp/src
parentsome fixes (diff)
downloadice-a41bb120db0ccdea5eea58e26bd30eddaff40877.tar.bz2
ice-a41bb120db0ccdea5eea58e26bd30eddaff40877.tar.xz
ice-a41bb120db0ccdea5eea58e26bd30eddaff40877.zip
complete shutdown/deactivate re-implementation
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/.depend20
-rw-r--r--cpp/src/Ice/CommunicatorI.cpp31
-rw-r--r--cpp/src/Ice/Connection.cpp406
-rw-r--r--cpp/src/Ice/Connection.h68
-rw-r--r--cpp/src/Ice/ConnectionFactory.cpp205
-rw-r--r--cpp/src/Ice/ConnectionFactory.h32
-rw-r--r--cpp/src/Ice/Direct.cpp14
-rw-r--r--cpp/src/Ice/Incoming.cpp146
-rw-r--r--cpp/src/Ice/IncomingAsync.cpp91
-rw-r--r--cpp/src/Ice/Instance.cpp136
-rw-r--r--cpp/src/Ice/ObjectAdapterFactory.cpp72
-rw-r--r--cpp/src/Ice/ObjectAdapterFactory.h6
-rw-r--r--cpp/src/Ice/ObjectAdapterI.cpp381
-rw-r--r--cpp/src/Ice/ObjectAdapterI.h18
-rw-r--r--cpp/src/Ice/OutgoingAsync.cpp20
-rw-r--r--cpp/src/Ice/Proxy.cpp10
-rw-r--r--cpp/src/Ice/ThreadPool.cpp246
-rw-r--r--cpp/src/Ice/ThreadPool.h6
-rw-r--r--cpp/src/Ice/TraceUtil.cpp9
19 files changed, 969 insertions, 948 deletions
diff --git a/cpp/src/Ice/.depend b/cpp/src/Ice/.depend
index 5fef55a0a9c..b9c0811e176 100644
--- a/cpp/src/Ice/.depend
+++ b/cpp/src/Ice/.depend
@@ -20,8 +20,8 @@ CommunicatorI.o: CommunicatorI.cpp ../Ice/CommunicatorI.h ../../include/IceUtil/
ObjectFactory.o: ObjectFactory.cpp ../../include/Ice/ObjectFactory.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Stream.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h
ObjectFactoryManager.o: ObjectFactoryManager.cpp ../Ice/ObjectFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/ObjectFactoryManagerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/LocalException.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h
ObjectAdapter.o: ObjectAdapter.cpp ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Stream.h ../../include/Ice/BuiltinSequences.h
-ObjectAdapterI.o: ObjectAdapterI.cpp ../../include/IceUtil/UUID.h ../../include/IceUtil/Config.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/LoggerF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/LocatorInfoF.h ../../include/Ice/ServantLocator.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/PropertiesF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../Ice/ProxyFactory.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/Endpoint.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/ConnectionFactory.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/RouterInfo.h ../../include/Ice/RoutingTableF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/LoggerUtil.h ../../include/Ice/IdentityUtil.h
-ObjectAdapterFactory.o: ObjectAdapterFactory.cpp ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/LoggerF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/LocatorInfoF.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
+ObjectAdapterI.o: ObjectAdapterI.cpp ../../include/IceUtil/UUID.h ../../include/IceUtil/Config.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/LoggerF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/LocatorInfoF.h ../../include/Ice/ServantLocator.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/PropertiesF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../Ice/ProxyFactory.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../Ice/Endpoint.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/EndpointFactoryManager.h ../../include/Ice/EndpointFactoryF.h ../Ice/ConnectionFactory.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/RouterInfo.h ../../include/Ice/RoutingTableF.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/LocatorInfo.h ../../include/Ice/Locator.h ../../include/Ice/IncomingAsync.h ../../include/Ice/LoggerUtil.h ../../include/Ice/IdentityUtil.h
+ObjectAdapterFactory.o: ObjectAdapterFactory.cpp ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/LoggerF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/LocatorInfoF.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
ServantLocator.o: ServantLocator.cpp ../../include/Ice/ServantLocator.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Stream.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h
UserExceptionFactory.o: UserExceptionFactory.cpp ../../include/Ice/UserExceptionFactory.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h
UserExceptionFactoryManager.o: UserExceptionFactoryManager.cpp ../Ice/UserExceptionFactoryManager.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/LocalException.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h
@@ -40,19 +40,19 @@ Current.o: Current.cpp ../../include/Ice/Current.h ../../include/Ice/LocalObject
Router.o: Router.cpp ../../include/Ice/Router.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LocalException.h ../../include/Ice/ObjectFactory.h ../../include/Ice/Stream.h ../../include/Ice/BuiltinSequences.h
RouterInfo.o: RouterInfo.cpp ../Ice/RouterInfo.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/RouterInfoF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/RouterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Router.h ../../include/Ice/RoutingTable.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
RoutingTable.o: RoutingTable.cpp ../../include/Ice/RoutingTable.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/RoutingTableF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Identity.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Facet.h
-Connection.o: Connection.cpp ../Ice/Connection.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ConnectionF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/EndpointF.h ../Ice/ThreadPoolF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/OutgoingAsyncF.h ../Ice/DefaultsAndOverridesF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Properties.h ../../include/Ice/Proxy.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../Ice/TraceUtil.h ../Ice/DefaultsAndOverrides.h ../Ice/Transceiver.h ../Ice/ThreadPool.h ../../include/IceUtil/Thread.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/Endpoint.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/LocalException.h ../Ice/Protocol.h
-ConnectionFactory.o: ConnectionFactory.cpp ../Ice/ConnectionFactory.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ConnectionF.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/EndpointF.h ../Ice/AcceptorF.h ../Ice/TransceiverF.h ../../include/Ice/RouterF.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../Ice/Connection.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../Ice/Transceiver.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/Acceptor.h ../Ice/ThreadPool.h ../../include/IceUtil/Thread.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocatorF.h ../Ice/Reference.h ../Ice/Endpoint.h ../Ice/RouterInfo.h ../../include/Ice/RoutingTableF.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
+Connection.o: Connection.cpp ../Ice/Connection.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ConnectionF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/InstanceF.h ../Ice/TransceiverF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/EndpointF.h ../Ice/ThreadPoolF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/OutgoingAsyncF.h ../Ice/DefaultsAndOverridesF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Properties.h ../../include/Ice/Proxy.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../Ice/TraceUtil.h ../Ice/DefaultsAndOverrides.h ../Ice/Transceiver.h ../Ice/ThreadPool.h ../../include/IceUtil/Thread.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../Ice/Endpoint.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/LocalException.h ../Ice/Protocol.h
+ConnectionFactory.o: ConnectionFactory.cpp ../Ice/ConnectionFactory.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ConnectionFactoryF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ConnectionF.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/EndpointF.h ../Ice/AcceptorF.h ../Ice/TransceiverF.h ../../include/Ice/RouterF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/ThreadPoolF.h ../Ice/Connection.h ../../include/IceUtil/RecMutex.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/DefaultsAndOverrides.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../Ice/Transceiver.h ../Ice/Connector.h ../Ice/ConnectorF.h ../Ice/Acceptor.h ../Ice/ThreadPool.h ../../include/IceUtil/Thread.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/LocatorF.h ../Ice/Reference.h ../Ice/Endpoint.h ../Ice/RouterInfo.h ../../include/Ice/RoutingTableF.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
LocalObject.o: LocalObject.cpp ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/StreamF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h
Object.o: Object.cpp ../../include/Ice/Object.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/StreamF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/ConnectionF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Stream.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LocalException.h
ProxyFactory.o: ProxyFactory.cpp ../Ice/ProxyFactory.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../../include/Ice/ReferenceF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../Ice/ReferenceFactory.h ../Ice/Reference.h ../../include/Ice/RouterF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LocatorF.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h
-Proxy.o: Proxy.cpp ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../Ice/ProxyFactory.h ../../include/Ice/InstanceF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/LoggerF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/LocatorInfoF.h ../../include/Ice/OutgoingAsync.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../Ice/RouterInfoF.h ../Ice/Endpoint.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/PropertiesF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/ConnectionFactory.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/Connection.h ../Ice/RouterInfo.h ../../include/Ice/RoutingTableF.h ../Ice/LocatorInfo.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
+Proxy.o: Proxy.cpp ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Config.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Handle.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../Ice/ProxyFactory.h ../../include/Ice/InstanceF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/LoggerF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/LocatorInfoF.h ../../include/Ice/OutgoingAsync.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../Ice/RouterInfoF.h ../Ice/Endpoint.h ../Ice/TransceiverF.h ../Ice/ConnectorF.h ../Ice/AcceptorF.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/PropertiesF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/ThreadPoolF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/LoggerUtil.h ../Ice/TraceLevels.h ../Ice/ConnectionFactory.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/Connection.h ../Ice/RouterInfo.h ../../include/Ice/RoutingTableF.h ../Ice/LocatorInfo.h ../../include/Ice/LocalException.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h
Outgoing.o: Outgoing.cpp ../../include/Ice/Outgoing.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ConnectionF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ReferenceF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../Ice/Connection.h ../../include/IceUtil/RecMutex.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/EndpointF.h ../Ice/ThreadPoolF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/OutgoingAsyncF.h ../Ice/DefaultsAndOverridesF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../../include/Ice/LocalException.h
-OutgoingAsync.o: OutgoingAsync.cpp ../../include/Ice/OutgoingAsync.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ConnectionF.h ../../include/Ice/ReferenceF.h ../../include/Ice/InstanceF.h ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../Ice/Connection.h ../../include/IceUtil/RecMutex.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/EndpointF.h ../Ice/ThreadPoolF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h
-Incoming.o: Incoming.cpp ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ConnectionF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Direct.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/LoggerF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/LocatorInfoF.h ../../include/Ice/ServantLocator.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/PropertiesF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ThreadPoolF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/IdentityUtil.h ../../include/Ice/LoggerUtil.h ../Ice/StringUtil.h ../Ice/Protocol.h
-IncomingAsync.o: IncomingAsync.cpp ../../include/Ice/IncomingAsync.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ConnectionF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Incoming.h ../../include/Ice/Direct.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/LoggerF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/LocatorInfoF.h ../../include/Ice/ServantLocator.h ../Ice/Connection.h ../../include/IceUtil/RecMutex.h ../Ice/TransceiverF.h ../Ice/ThreadPoolF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/LocalException.h ../Ice/Protocol.h
-Direct.o: Direct.cpp ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/LoggerF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/LocatorInfoF.h ../../include/Ice/ServantLocator.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../Ice/RouterInfoF.h ../../include/Ice/LocalException.h
+OutgoingAsync.o: OutgoingAsync.cpp ../../include/Ice/OutgoingAsync.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ConnectionF.h ../../include/Ice/ReferenceF.h ../../include/Ice/InstanceF.h ../../include/Ice/Current.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/IncomingAsyncF.h ../Ice/Connection.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/EndpointF.h ../Ice/ThreadPoolF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/Outgoing.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/LocatorF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h
+Incoming.o: Incoming.cpp ../../include/Ice/Incoming.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ConnectionF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/EndpointF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Object.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Direct.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/ServantLocator.h ../Ice/Connection.h ../../include/IceUtil/RecMutex.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../Ice/ThreadPoolF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/LocalException.h ../Ice/Instance.h ../../include/Ice/PropertiesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Properties.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/IdentityUtil.h ../../include/Ice/LoggerUtil.h ../Ice/StringUtil.h ../Ice/Protocol.h
+IncomingAsync.o: IncomingAsync.cpp ../../include/Ice/IncomingAsync.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ConnectionF.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../../include/Ice/ServantLocator.h ../../include/Ice/Object.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/Incoming.h ../Ice/Connection.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ConnectionFactoryF.h ../Ice/TransceiverF.h ../../include/Ice/EndpointF.h ../Ice/ThreadPoolF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../../include/Ice/OutgoingAsyncF.h ../Ice/DefaultsAndOverridesF.h ../Ice/EventHandler.h ../Ice/EventHandlerF.h ../../include/Ice/LocalException.h ../Ice/Protocol.h
+Direct.o: Direct.cpp ../../include/Ice/Direct.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/ReferenceF.h ../../include/Ice/Current.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../Ice/ObjectAdapterI.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Incoming.h ../../include/Ice/CommunicatorF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/ObjectAdapterFactoryF.h ../../include/Ice/LoggerF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/LocatorInfoF.h ../../include/Ice/ServantLocator.h ../Ice/Reference.h ../Ice/ReferenceFactoryF.h ../Ice/RouterInfoF.h ../../include/Ice/LocalException.h
Network.o: Network.cpp ../../include/IceUtil/Mutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../Ice/Network.h ../../include/Ice/Config.h ../../include/Ice/LocalException.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/Ice/StreamF.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h
-ThreadPool.o: ThreadPool.cpp ../Ice/ThreadPool.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../Ice/ThreadPoolF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../Ice/EventHandlerF.h ../Ice/EventHandler.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../Ice/Network.h ../../include/Ice/LocalException.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/CommunicatorF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Properties.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/Protocol.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h
+ThreadPool.o: ThreadPool.cpp ../Ice/ThreadPool.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Handle.h ../Ice/ThreadPoolF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../../include/Ice/PropertiesF.h ../Ice/EventHandlerF.h ../Ice/EventHandler.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../Ice/Network.h ../../include/Ice/LocalException.h ../../include/Ice/Identity.h ../../include/Ice/Facet.h ../Ice/Instance.h ../../include/IceUtil/RecMutex.h ../../include/Ice/CommunicatorF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h ../../include/Ice/Properties.h ../../include/Ice/Proxy.h ../../include/Ice/ConnectionF.h ../../include/Ice/EndpointF.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/Direct.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../Ice/Protocol.h ../Ice/ObjectAdapterFactory.h ../Ice/ObjectAdapterI.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h
EventHandler.o: EventHandler.cpp ../Ice/EventHandler.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/EventHandlerF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/InstanceF.h ../Ice/ThreadPoolF.h ../../include/Ice/BasicStream.h ../../include/Ice/ObjectF.h ../../include/Ice/ProxyF.h ../../include/Ice/ProxyHandle.h ../../include/Ice/Buffer.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/StreamF.h ../Ice/Instance.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/RecMutex.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../Ice/TraceLevelsF.h ../Ice/DefaultsAndOverridesF.h ../Ice/RouterInfoF.h ../Ice/LocatorInfoF.h ../Ice/ReferenceFactoryF.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionFactoryF.h ../Ice/ObjectFactoryManagerF.h ../Ice/UserExceptionFactoryManagerF.h ../../include/Ice/ObjectAdapterFactoryF.h ../Ice/EndpointFactoryManagerF.h ../../include/Ice/DynamicLibraryF.h ../../include/Ice/PluginF.h
Connector.o: Connector.cpp ../Ice/Connector.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/ConnectorF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../Ice/TransceiverF.h
Acceptor.o: Acceptor.cpp ../Ice/Acceptor.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../Ice/AcceptorF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../Ice/TransceiverF.h
diff --git a/cpp/src/Ice/CommunicatorI.cpp b/cpp/src/Ice/CommunicatorI.cpp
index be71717e327..dc41f2849f2 100644
--- a/cpp/src/Ice/CommunicatorI.cpp
+++ b/cpp/src/Ice/CommunicatorI.cpp
@@ -37,11 +37,8 @@ Ice::CommunicatorI::destroy()
if(!_destroyed) // Don't destroy twice.
{
_destroyed = true;
-
- _instance->objectAdapterFactory()->shutdown();
- _instance->destroy();
-
_serverThreadPool = 0;
+ _instance->destroy();
}
}
@@ -60,14 +57,23 @@ Ice::CommunicatorI::shutdown()
void
Ice::CommunicatorI::waitForShutdown()
{
- //
- // No mutex locking here, otherwise the communicator is blocked
- // while waiting for shutdown.
- //
- if(_serverThreadPool)
+ ObjectAdapterFactoryPtr objectAdapterFactory;
+
{
- _serverThreadPool->waitUntilFinished();
+ RecMutex::Lock sync(*this);
+ if(_destroyed)
+ {
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
+ }
+ objectAdapterFactory = _instance->objectAdapterFactory();
}
+
+ //
+ // We must call waitForShutdown on the object adapter factory
+ // outside the synchronization, otherwise the communicator is
+ // blocked while we wait for shutdown.
+ //
+ objectAdapterFactory->waitForShutdown();
}
ObjectPrx
@@ -307,8 +313,9 @@ Ice::CommunicatorI::~CommunicatorI()
{
Warning warn(_instance->logger());
warn <<
- "The communicator is not the last Ice object that is deleted. (You can\n"
- "disable this warning by setting the property `Ice.Warn.Leaks' to 0.)";
+ "The communicator is not the last Ice object that is\n"
+ "deleted. (You can disable this warning by setting the\n"
+ "property `Ice.Warn.Leaks' to 0.)";
}
}
}
diff --git a/cpp/src/Ice/Connection.cpp b/cpp/src/Ice/Connection.cpp
index 7cd4aae0847..1128835a881 100644
--- a/cpp/src/Ice/Connection.cpp
+++ b/cpp/src/Ice/Connection.cpp
@@ -36,17 +36,83 @@ using namespace IceInternal;
void IceInternal::incRef(Connection* p) { p->__incRef(); }
void IceInternal::decRef(Connection* p) { p->__decRef(); }
+void
+IceInternal::Connection::activate()
+{
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+ setState(StateActive);
+}
+
+void
+IceInternal::Connection::hold()
+{
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+ setState(StateHolding);
+}
+
+void
+IceInternal::Connection::destroy(DestructionReason reason)
+{
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+
+ switch(reason)
+ {
+ case ObjectAdapterDeactivated:
+ {
+ setState(StateClosing, ObjectAdapterDeactivatedException(__FILE__, __LINE__));
+ break;
+ }
+
+ case CommunicatorDestroyed:
+ {
+ setState(StateClosing, CommunicatorDestroyedException(__FILE__, __LINE__));
+ break;
+ }
+ }
+}
+
bool
-IceInternal::Connection::destroyed() const
+IceInternal::Connection::isDestroyed() const
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+
return _state >= StateClosing;
}
+bool
+IceInternal::Connection::isFinished() const
+{
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+
+ return _transceiver == 0;
+}
+
+void
+IceInternal::Connection::waitUntilHolding() const
+{
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+
+ while(_state < StateHolding || _dispatchCount > 0)
+ {
+ wait();
+ }
+}
+
+void
+IceInternal::Connection::waitUntilFinished() const
+{
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+
+ while(_transceiver)
+ {
+ wait();
+ }
+}
+
void
IceInternal::Connection::validate()
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
if(_endpoint->datagram())
{
@@ -122,34 +188,20 @@ IceInternal::Connection::validate()
}
void
-IceInternal::Connection::hold()
+IceInternal::Connection::incProxyCount()
{
- IceUtil::RecMutex::Lock sync(*this);
- setState(StateHolding);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+ assert(_proxyCount >= 0);
+ ++_proxyCount;
}
void
-IceInternal::Connection::activate()
+IceInternal::Connection::decProxyCount()
{
- IceUtil::RecMutex::Lock sync(*this);
- setState(StateActive);
-}
-
-void
-IceInternal::Connection::incUsageCount()
-{
- IceUtil::RecMutex::Lock sync(*this);
- assert(_usageCount >= 0);
- ++_usageCount;
-}
-
-void
-IceInternal::Connection::decUsageCount()
-{
- IceUtil::RecMutex::Lock sync(*this);
- assert(_usageCount > 0);
- --_usageCount;
- if(_usageCount == 0 && !_adapter)
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+ assert(_proxyCount > 0);
+ --_proxyCount;
+ if(_proxyCount == 0 && !_adapter)
{
assert(_requests.empty());
assert(_asyncRequests.empty());
@@ -164,9 +216,9 @@ IceInternal::Connection::prepareRequest(BasicStream* os)
}
void
-IceInternal::Connection::sendRequest(Outgoing* out, bool oneway, bool comp)
+IceInternal::Connection::sendRequest(Outgoing* out, bool oneway, bool compress)
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
if(_exception.get())
{
@@ -198,17 +250,17 @@ IceInternal::Connection::sendRequest(Outgoing* out, bool oneway, bool comp)
if(os->b.size() < 100) // Don't compress if message size is smaller than 100 bytes.
{
- comp = false;
+ compress = false;
}
else
{
if(_defaultsAndOverrides->overrideCompress)
{
- comp = _defaultsAndOverrides->overrideCompressValue;
+ compress = _defaultsAndOverrides->overrideCompressValue;
}
}
- if(comp)
+ if(compress)
{
//
// Change message type.
@@ -219,7 +271,7 @@ IceInternal::Connection::sendRequest(Outgoing* out, bool oneway, bool comp)
// Do compression.
//
BasicStream cstream(_instance);
- compress(*os, cstream);
+ doCompress(*os, cstream);
//
// Send the request.
@@ -265,9 +317,9 @@ IceInternal::Connection::sendRequest(Outgoing* out, bool oneway, bool comp)
}
void
-IceInternal::Connection::sendAsyncRequest(const OutgoingAsyncPtr& out, bool comp)
+IceInternal::Connection::sendAsyncRequest(const OutgoingAsyncPtr& out, bool compress)
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
if(_exception.get())
{
@@ -296,17 +348,17 @@ IceInternal::Connection::sendAsyncRequest(const OutgoingAsyncPtr& out, bool comp
if(os->b.size() < 100) // Don't compress if message size is smaller than 100 bytes.
{
- comp = false;
+ compress = false;
}
else
{
if(_defaultsAndOverrides->overrideCompress)
{
- comp = _defaultsAndOverrides->overrideCompressValue;
+ compress = _defaultsAndOverrides->overrideCompressValue;
}
}
- if(comp)
+ if(compress)
{
//
// Change message type.
@@ -317,7 +369,7 @@ IceInternal::Connection::sendAsyncRequest(const OutgoingAsyncPtr& out, bool comp
// Do compression.
//
BasicStream cstream(_instance);
- compress(*os, cstream);
+ doCompress(*os, cstream);
//
// Send the request.
@@ -398,6 +450,7 @@ IceInternal::Connection::finishBatchRequest(BasicStream* os)
assert(_state < StateClosing);
_batchStream.swap(*os); // Get the batch stream back.
+ ++_batchRequestNum; // Increment the number of requests in the batch.
unlock(); // Give the Connection back.
}
@@ -409,9 +462,9 @@ IceInternal::Connection::abortBatchRequest()
}
void
-IceInternal::Connection::flushBatchRequest(bool comp)
+IceInternal::Connection::flushBatchRequest(bool compress)
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
if(_exception.get())
{
@@ -428,19 +481,26 @@ IceInternal::Connection::flushBatchRequest(bool comp)
_batchStream.i = _batchStream.b.begin();
+ //
+ // Fill in the number of requests in the batch.
+ //
+ const Byte* p;
+ p = reinterpret_cast<const Byte*>(&_batchRequestNum);
+ copy(p, p + sizeof(Int), _batchStream.b.begin() + headerSize);
+
if(_batchStream.b.size() < 100) // Don't compress if message size is smaller than 100 bytes.
{
- comp = false;
+ compress = false;
}
else
{
if(_defaultsAndOverrides->overrideCompress)
{
- comp = _defaultsAndOverrides->overrideCompressValue;
+ compress = _defaultsAndOverrides->overrideCompressValue;
}
}
- if(comp)
+ if(compress)
{
//
// Change message type.
@@ -451,7 +511,7 @@ IceInternal::Connection::flushBatchRequest(bool comp)
// Do compression.
//
BasicStream cstream(_instance);
- compress(_batchStream, cstream);
+ doCompress(_batchStream, cstream);
//
// Send the batch request.
@@ -480,11 +540,13 @@ IceInternal::Connection::flushBatchRequest(bool comp)
}
//
- // Reset _batchStream so that new batch messages can be sent.
+ // Reset _batchStream and _batchRequestNum, so that new batch
+ // messages can be sent.
//
BasicStream dummy(_instance);
_batchStream.swap(dummy);
assert(_batchStream.b.empty());
+ _batchRequestNum = 0;
}
catch(const LocalException& ex)
{
@@ -495,9 +557,9 @@ IceInternal::Connection::flushBatchRequest(bool comp)
}
void
-IceInternal::Connection::sendResponse(BasicStream* os, bool comp)
+IceInternal::Connection::sendResponse(BasicStream* os, bool compress)
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
try
{
@@ -508,17 +570,17 @@ IceInternal::Connection::sendResponse(BasicStream* os, bool comp)
if(os->b.size() < 100) // Don't compress if message size is smaller than 100 bytes.
{
- comp = false;
+ compress = false;
}
else
{
if(_defaultsAndOverrides->overrideCompress)
{
- comp = _defaultsAndOverrides->overrideCompressValue;
+ compress = _defaultsAndOverrides->overrideCompressValue;
}
}
- if(comp)
+ if(compress)
{
//
// Change message type.
@@ -529,7 +591,7 @@ IceInternal::Connection::sendResponse(BasicStream* os, bool comp)
// Do compression.
//
BasicStream cstream(_instance);
- compress(*os, cstream);
+ doCompress(*os, cstream);
//
// Send the reply.
@@ -557,17 +619,47 @@ IceInternal::Connection::sendResponse(BasicStream* os, bool comp)
_transceiver->write(*os, _endpoint->timeout());
}
- --_responseCount;
+ if(--_dispatchCount == 0)
+ {
+ notifyAll();
+ }
- if(_state == StateClosing && _responseCount == 0 && !_endpoint->datagram())
+ if(_state == StateClosing && _dispatchCount == 0)
{
- closeConnection();
+ initiateShutdown();
+ }
+ }
+ catch(const LocalException& ex)
+ {
+ setState(StateClosed, ex);
+ }
+}
+
+void
+IceInternal::Connection::sendNoResponse()
+{
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
+
+ try
+ {
+ if(_state == StateClosed)
+ {
+ return;
+ }
+
+ if(--_dispatchCount == 0)
+ {
+ notifyAll();
+ }
+
+ if(_state == StateClosing && _dispatchCount == 0)
+ {
+ initiateShutdown();
}
}
catch(const LocalException& ex)
{
setState(StateClosed, ex);
- return;
}
}
@@ -588,7 +680,7 @@ IceInternal::Connection::endpoint() const
void
IceInternal::Connection::setAdapter(const ObjectAdapterPtr& adapter)
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
//
// We are registered with a thread pool in active and closing
@@ -620,7 +712,7 @@ IceInternal::Connection::setAdapter(const ObjectAdapterPtr& adapter)
ObjectAdapterPtr
IceInternal::Connection::getAdapter() const
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
return _adapter;
}
@@ -640,12 +732,13 @@ void
IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threadPool)
{
OutgoingAsyncPtr outAsync;
- bool invoke = false;
- bool comp = false;
- bool batch = false;
+
+ Int invoke = 0;
+ Int requestId = 0;
+ bool compress = false;
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
threadPool->promoteFollower();
@@ -671,9 +764,9 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
messageType == compressedReplyMsg)
{
BasicStream ustream(_instance);
- uncompress(stream, ustream);
+ doUncompress(stream, ustream);
stream.b.swap(ustream.b);
- comp = true;
+ compress = true;
}
stream.i = stream.b.begin() + headerSize;
@@ -691,7 +784,9 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
else
{
traceRequest("received request", stream, _logger, _traceLevels);
- invoke = true;
+ stream.read(requestId);
+ invoke = 1;
+ ++_dispatchCount;
}
break;
}
@@ -707,7 +802,9 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
else
{
traceRequest("received compressed request", stream, _logger, _traceLevels);
- invoke = true;
+ stream.read(requestId);
+ invoke = 1;
+ ++_dispatchCount;
}
break;
}
@@ -723,8 +820,12 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
else
{
traceBatchRequest("received batch request", stream, _logger, _traceLevels);
- invoke = true;
- batch = true;
+ stream.read(invoke);
+ if(invoke < 0)
+ {
+ throw NegativeSizeException(__FILE__, __LINE__);
+ }
+ _dispatchCount += invoke;
}
break;
}
@@ -740,8 +841,12 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
else
{
traceBatchRequest("received compressed batch request", stream, _logger, _traceLevels);
- invoke = true;
- batch = true;
+ stream.read(invoke);
+ if(invoke < 0)
+ {
+ throw NegativeSizeException(__FILE__, __LINE__);
+ }
+ _dispatchCount += invoke;
}
break;
}
@@ -758,7 +863,6 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
traceReply("received reply", stream, _logger, _traceLevels);
}
- Int requestId;
stream.read(requestId);
map<Int, Outgoing*>::iterator p = _requests.end();
@@ -893,22 +997,13 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
// Method invocation must be done outside the thread
// synchronization, so that nested calls are possible.
//
- if(invoke)
+ if(invoke > 0)
{
//
- // If this is not a batch request, get the request id.
- //
- Int requestId = 0;
- if(!batch)
- {
- stream.read(requestId);
- }
- bool response = !_endpoint->datagram() && requestId != 0;
-
- //
// Prepare the invocation.
//
- Incoming in(_instance, _adapter, response ? this : 0, comp);
+ bool response = !_endpoint->datagram() && requestId != 0;
+ Incoming in(_instance, _adapter, this, response, compress);
BasicStream* is = in.is();
stream.swap(*is);
BasicStream* os = in.os();
@@ -920,53 +1015,39 @@ IceInternal::Connection::message(BasicStream& stream, const ThreadPoolPtr& threa
//
if(response)
{
- ++_responseCount;
- os->write(protocolVersion);
- os->write(encodingVersion);
- os->write(replyMsg);
- os->write(Int(0)); // Message size (placeholder).
- os->write(requestId);
+ assert(invoke == 1);
+ os->writeBlob(_replyHdr);
+
+ //
+ // Fill in the request ID.
+ //
+ const Byte* p;
+ p = reinterpret_cast<const Byte*>(&requestId);
+ copy(p, p + sizeof(Int), os->b.begin() + headerSize);
}
//
// Do the invocation, or multiple invocations for batch
// messages.
//
- do
+ while(invoke-- > 0)
{
- if(in.invoke())
- {
- //
- // If invoke() returned true, the operation was
- // dispatched asynchronously, meaning that we
- // don't send a response below.
- //
- response = false;
- }
+ in.invoke();
}
- while(batch && is->i < is->b.end());
}
catch(const LocalException& ex)
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
setState(StateClosed, ex);
return;
}
-
- //
- // Send a response if necessary.
- //
- if(response)
- {
- sendResponse(os, comp);
- }
}
}
void
IceInternal::Connection::finished(const ThreadPoolPtr& threadPool)
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
threadPool->promoteFollower();
@@ -977,13 +1058,15 @@ IceInternal::Connection::finished(const ThreadPoolPtr& threadPool)
else if(_state == StateClosed)
{
_transceiver->close();
+ _transceiver = 0;
+ notifyAll();
}
}
void
IceInternal::Connection::exception(const LocalException& ex)
{
- IceUtil::RecMutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::RecMutex>::Lock sync(*this);
setState(StateClosed, ex);
}
@@ -1004,62 +1087,42 @@ IceInternal::Connection::Connection(const InstancePtr& instance,
_logger(_instance->logger()),
_traceLevels(_instance->traceLevels()),
_defaultsAndOverrides(_instance->defaultsAndOverrides()),
+ _registeredWithPool(false),
_warn(_instance->properties()->getPropertyAsInt("Ice.Warn.Connections") > 0),
+ _requestHdr(headerSize + 4, 0),
+ _requestBatchHdr(headerSize + 4, 0),
+ _replyHdr(headerSize + 4, 0),
_nextRequestId(1),
_requestsHint(_requests.end()),
_asyncRequestsHint(_asyncRequests.end()),
_batchStream(_instance),
- _responseCount(0),
- _usageCount(0),
- _state(StateHolding),
- _registeredWithPool(false)
+ _batchRequestNum(0),
+ _dispatchCount(0),
+ _proxyCount(0),
+ _state(StateHolding)
{
vector<Byte>& requestHdr = const_cast<vector<Byte>&>(_requestHdr);
- requestHdr.reserve(headerSize + 4);
- requestHdr.push_back(protocolVersion);
- requestHdr.push_back(encodingVersion);
- requestHdr.push_back(requestMsg);
- requestHdr.push_back(0); // Message size (placeholder).
- requestHdr.push_back(0); // Message size (placeholder).
- requestHdr.push_back(0); // Message size (placeholder).
- requestHdr.push_back(0); // Message size (placeholder).
- requestHdr.push_back(0); // Request ID (placeholder).
- requestHdr.push_back(0); // Request ID (placeholder).
- requestHdr.push_back(0); // Request ID (placeholder).
- requestHdr.push_back(0); // Request ID (placeholder).
- assert(_requestHdr.size() == headerSize + 4);
+ requestHdr[0] = protocolVersion;
+ requestHdr[1] = encodingVersion;
+ requestHdr[2] = requestMsg;
vector<Byte>& requestBatchHdr = const_cast<vector<Byte>&>(_requestBatchHdr);
- requestBatchHdr.resize(_requestHdr.size() - 4);
- copy(_requestHdr.begin(), _requestHdr.end() - 4, requestBatchHdr.begin());
+ requestBatchHdr[0] = protocolVersion;
+ requestBatchHdr[1] = encodingVersion;
requestBatchHdr[2] = requestBatchMsg;
+
+ vector<Byte>& replyHdr = const_cast<vector<Byte>&>(_replyHdr);
+ replyHdr[0] = protocolVersion;
+ replyHdr[1] = encodingVersion;
+ replyHdr[2] = replyMsg;
}
IceInternal::Connection::~Connection()
{
- assert(_usageCount == 0);
assert(_state == StateClosed);
-}
-
-void
-IceInternal::Connection::destroy(DestructionReason reason)
-{
- RecMutex::Lock sync(*this);
-
- switch(reason)
- {
- case ObjectAdapterDeactivated:
- {
- setState(StateClosing, ObjectAdapterDeactivatedException(__FILE__, __LINE__));
- break;
- }
-
- case CommunicatorDestroyed:
- {
- setState(StateClosing, CommunicatorDestroyedException(__FILE__, __LINE__));
- break;
- }
- }
+ assert(!_transceiver);
+ assert(_dispatchCount == 0);
+ assert(_proxyCount == 0);
}
void
@@ -1174,17 +1237,19 @@ IceInternal::Connection::setState(State state)
registerWithPool();
}
unregisterWithPool();
+ _dispatchCount = 0;
break;
}
}
_state = state;
+ notifyAll();
- if(_state == StateClosing && _responseCount == 0 && !_endpoint->datagram())
+ if(_state == StateClosing && _dispatchCount == 0)
{
try
{
- closeConnection();
+ initiateShutdown();
}
catch(const LocalException& ex)
{
@@ -1194,21 +1259,26 @@ IceInternal::Connection::setState(State state)
}
void
-IceInternal::Connection::closeConnection() const
+IceInternal::Connection::initiateShutdown() const
{
- BasicStream os(_instance);
- os.write(protocolVersion);
- os.write(encodingVersion);
- os.write(closeConnectionMsg);
- os.write(headerSize); // Message size.
- os.i = os.b.begin();
- traceHeader("sending close connection", os, _logger, _traceLevels);
- _transceiver->write(os, _endpoint->timeout());
+ assert(_state == StateClosing);
+ assert(_dispatchCount == 0);
- //
- // A close connection is always followed by a connection shutdown.
- //
- _transceiver->shutdown();
+ if(!_endpoint->datagram())
+ {
+ //
+ // Before we shut down, we send a close connection message.
+ //
+ BasicStream os(_instance);
+ os.write(protocolVersion);
+ os.write(encodingVersion);
+ os.write(closeConnectionMsg);
+ os.write(headerSize); // Message size.
+ os.i = os.b.begin();
+ traceHeader("sending close connection", os, _logger, _traceLevels);
+ _transceiver->write(os, _endpoint->timeout());
+ _transceiver->shutdown();
+ }
}
void
@@ -1321,7 +1391,7 @@ getBZ2Error(int bzError)
}
void
-IceInternal::Connection::compress(BasicStream& uncompressed, BasicStream& compressed)
+IceInternal::Connection::doCompress(BasicStream& uncompressed, BasicStream& compressed)
{
const Byte* p;
@@ -1366,7 +1436,7 @@ IceInternal::Connection::compress(BasicStream& uncompressed, BasicStream& compre
}
void
-IceInternal::Connection::uncompress(BasicStream& compressed, BasicStream& uncompressed)
+IceInternal::Connection::doUncompress(BasicStream& compressed, BasicStream& uncompressed)
{
Int uncompressedSize;
compressed.i = compressed.b.begin() + headerSize;
diff --git a/cpp/src/Ice/Connection.h b/cpp/src/Ice/Connection.h
index 6ca8a3b5ec9..ef1eff48934 100644
--- a/cpp/src/Ice/Connection.h
+++ b/cpp/src/Ice/Connection.h
@@ -16,7 +16,7 @@
#define ICE_CONNECTION_H
#include <IceUtil/RecMutex.h>
-
+#include <IceUtil/Monitor.h>
#include <Ice/ConnectionF.h>
#include <Ice/ConnectionFactoryF.h>
#include <Ice/InstanceF.h>
@@ -42,26 +42,45 @@ namespace IceInternal
class Outgoing;
-class Connection : public EventHandler, public ::IceUtil::RecMutex
+class Connection : public EventHandler, public ::IceUtil::Monitor< ::IceUtil::RecMutex>
{
public:
- bool destroyed() const;
- void validate();
- void hold();
void activate();
- void incUsageCount();
- void decUsageCount();
+ void hold();
+ enum DestructionReason
+ {
+ ObjectAdapterDeactivated,
+ CommunicatorDestroyed
+ };
+ void destroy(DestructionReason);
+
+ bool isDestroyed() const;
+ bool isFinished() const;
+
+ void waitUntilHolding() const;
+ void waitUntilFinished() const;
+
+ void validate();
+
+ void incProxyCount();
+ void decProxyCount();
+
void prepareRequest(BasicStream*);
void sendRequest(Outgoing*, bool, bool);
void sendAsyncRequest(const OutgoingAsyncPtr&, bool);
+
void prepareBatchRequest(BasicStream*);
void finishBatchRequest(BasicStream*);
void abortBatchRequest();
void flushBatchRequest(bool);
+
void sendResponse(BasicStream*, bool);
+ void sendNoResponse();
+
int timeout() const;
EndpointPtr endpoint() const;
+
void setAdapter(const ::Ice::ObjectAdapterPtr&);
::Ice::ObjectAdapterPtr getAdapter() const;
@@ -79,12 +98,6 @@ private:
Connection(const InstancePtr&, const TransceiverPtr&, const EndpointPtr&, const ::Ice::ObjectAdapterPtr&);
virtual ~Connection();
- enum DestructionReason
- {
- ObjectAdapterDeactivated,
- CommunicatorDestroyed
- };
- void destroy(DestructionReason);
friend class IncomingConnectionFactory;
friend class OutgoingConnectionFactory;
@@ -98,34 +111,49 @@ private:
void setState(State, const ::Ice::LocalException&);
void setState(State);
- void closeConnection() const;
+
+ void initiateShutdown() const;
+
void registerWithPool();
void unregisterWithPool();
- static void compress(BasicStream&, BasicStream&);
- static void uncompress(BasicStream&, BasicStream&);
- const TransceiverPtr _transceiver;
+ static void doCompress(BasicStream&, BasicStream&);
+ static void doUncompress(BasicStream&, BasicStream&);
+
+ TransceiverPtr _transceiver;
const EndpointPtr _endpoint;
+
::Ice::ObjectAdapterPtr _adapter;
+
const ::Ice::LoggerPtr _logger;
const TraceLevelsPtr _traceLevels;
const DefaultsAndOverridesPtr _defaultsAndOverrides;
+
const ThreadPoolPtr _clientThreadPool;
const ThreadPoolPtr _serverThreadPool;
+ bool _registeredWithPool;
+
const bool _warn;
+
const std::vector< ::Ice::Byte> _requestHdr;
const std::vector< ::Ice::Byte> _requestBatchHdr;
+ const std::vector< ::Ice::Byte> _replyHdr;
+
::Ice::Int _nextRequestId;
std::map< ::Ice::Int, Outgoing*> _requests;
std::map< ::Ice::Int, Outgoing*>::iterator _requestsHint;
std::map< ::Ice::Int, OutgoingAsyncPtr> _asyncRequests;
std::map< ::Ice::Int, OutgoingAsyncPtr>::iterator _asyncRequestsHint;
+
std::auto_ptr< ::Ice::LocalException> _exception;
+
BasicStream _batchStream;
- int _responseCount;
- int _usageCount;
+ int _batchRequestNum;
+
+ int _dispatchCount; // The number of requests currently being dispatched.
+ int _proxyCount; // The number of proxies using this connection.
+
State _state;
- bool _registeredWithPool;
};
}
diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp
index ff635001516..9c29f05c431 100644
--- a/cpp/src/Ice/ConnectionFactory.cpp
+++ b/cpp/src/Ice/ConnectionFactory.cpp
@@ -40,10 +40,61 @@ void IceInternal::decRef(OutgoingConnectionFactory* p) { p->__decRef(); }
void IceInternal::incRef(IncomingConnectionFactory* p) { p->__incRef(); }
void IceInternal::decRef(IncomingConnectionFactory* p) { p->__decRef(); }
+void
+IceInternal::OutgoingConnectionFactory::destroy()
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ if(!_instance)
+ {
+ return;
+ }
+
+#ifdef _STLP_BEGIN_NAMESPACE
+ // voidbind2nd is an STLport extension for broken compilers in IceUtil/Functional.h
+ for_each(_connections.begin(), _connections.end(),
+ voidbind2nd(Ice::secondVoidMemFun1<EndpointPtr, Connection, Connection::DestructionReason>
+ (&Connection::destroy), Connection::CommunicatorDestroyed));
+#else
+ for_each(_connections.begin(), _connections.end(),
+ bind2nd(Ice::secondVoidMemFun1<EndpointPtr, Connection, Connection::DestructionReason>
+ (&Connection::destroy), Connection::CommunicatorDestroyed));
+#endif
+
+ _instance = 0;
+ notifyAll();
+}
+
+void
+IceInternal::OutgoingConnectionFactory::waitUntilFinished()
+{
+ ::IceUtil::Monitor< ::IceUtil::Mutex>::Lock sync(*this);
+
+ //
+ // First we wait until the factory is destroyed.
+ //
+ while(_instance)
+ {
+ wait();
+ }
+
+ //
+ // Now we wait for until the destruction of each connection is
+ // finished.
+ //
+ for_each(_connections.begin(), _connections.end(),
+ Ice::secondConstVoidMemFun<EndpointPtr, Connection>(&Connection::waitUntilFinished));
+
+ //
+ // We're done, now we can throw away all connections.
+ //
+ _connections.clear();
+}
+
ConnectionPtr
IceInternal::OutgoingConnectionFactory::create(const vector<EndpointPtr>& endpoints)
{
- IceUtil::Mutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
if(!_instance)
{
@@ -53,12 +104,12 @@ IceInternal::OutgoingConnectionFactory::create(const vector<EndpointPtr>& endpoi
assert(!endpoints.empty());
//
- // Reap destroyed connections.
+ // Reap connections for which destruction has completed.
//
std::map<EndpointPtr, ConnectionPtr>::iterator p = _connections.begin();
while(p != _connections.end())
{
- if(p->second->destroyed())
+ if(p->second->isFinished())
{
_connections.erase(p++);
}
@@ -84,7 +135,14 @@ IceInternal::OutgoingConnectionFactory::create(const vector<EndpointPtr>& endpoi
map<EndpointPtr, ConnectionPtr>::const_iterator r = _connections.find(endpoint);
if(r != _connections.end())
{
- return r->second;
+ //
+ // Don't return connections for which destruction has been
+ // initiated.
+ //
+ if(!r->second->isDestroyed())
+ {
+ return r->second;
+ }
}
}
@@ -156,7 +214,7 @@ IceInternal::OutgoingConnectionFactory::create(const vector<EndpointPtr>& endpoi
void
IceInternal::OutgoingConnectionFactory::setRouter(const RouterPrx& router)
{
- IceUtil::Mutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
if(!_instance)
{
@@ -196,7 +254,7 @@ IceInternal::OutgoingConnectionFactory::setRouter(const RouterPrx& router)
void
IceInternal::OutgoingConnectionFactory::removeAdapter(const ObjectAdapterPtr& adapter)
{
- IceUtil::Mutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
if(!_instance)
{
@@ -220,45 +278,73 @@ IceInternal::OutgoingConnectionFactory::OutgoingConnectionFactory(const Instance
IceInternal::OutgoingConnectionFactory::~OutgoingConnectionFactory()
{
assert(!_instance);
+ assert(_connections.empty());
}
void
-IceInternal::OutgoingConnectionFactory::destroy()
+IceInternal::IncomingConnectionFactory::activate()
{
- IceUtil::Mutex::Lock sync(*this);
-
- if(!_instance)
- {
- return;
- }
-
-#ifdef _STLP_BEGIN_NAMESPACE
- // voidbind2nd is an STLport extension for broken compilers in IceUtil/Functional.h
- for_each(_connections.begin(), _connections.end(),
- voidbind2nd(Ice::secondVoidMemFun1<EndpointPtr, Connection, Connection::DestructionReason>
- (&Connection::destroy), Connection::CommunicatorDestroyed));
-#else
- for_each(_connections.begin(), _connections.end(),
- bind2nd(Ice::secondVoidMemFun1<EndpointPtr, Connection, Connection::DestructionReason>
- (&Connection::destroy), Connection::CommunicatorDestroyed));
-#endif
-
- _connections.clear();
- _instance = 0;
+ ::IceUtil::Monitor< ::IceUtil::Mutex>::Lock sync(*this);
+ setState(StateActive);
}
void
IceInternal::IncomingConnectionFactory::hold()
{
- ::IceUtil::Mutex::Lock sync(*this);
+ ::IceUtil::Monitor< ::IceUtil::Mutex>::Lock sync(*this);
setState(StateHolding);
}
void
-IceInternal::IncomingConnectionFactory::activate()
+IceInternal::IncomingConnectionFactory::destroy()
{
- ::IceUtil::Mutex::Lock sync(*this);
- setState(StateActive);
+ ::IceUtil::Monitor< ::IceUtil::Mutex>::Lock sync(*this);
+ setState(StateClosed);
+}
+
+void
+IceInternal::IncomingConnectionFactory::waitUntilHolding() const
+{
+ ::IceUtil::Monitor< ::IceUtil::Mutex>::Lock sync(*this);
+
+ //
+ // First we wait until the connection factory itself is in holding
+ // state.
+ //
+ while(_state < StateHolding)
+ {
+ wait();
+ }
+
+ //
+ // Now we wait until each connection is in holding state.
+ //
+ for_each(_connections.begin(), _connections.end(), Ice::constVoidMemFun(&Connection::waitUntilHolding));
+}
+
+void
+IceInternal::IncomingConnectionFactory::waitUntilFinished()
+{
+ ::IceUtil::Monitor< ::IceUtil::Mutex>::Lock sync(*this);
+
+ //
+ // First we wait until the factory is destroyed.
+ //
+ while(_acceptor)
+ {
+ wait();
+ }
+
+ //
+ // Now we wait for until the destruction of each connection is
+ // finished.
+ //
+ for_each(_connections.begin(), _connections.end(), Ice::constVoidMemFun(&Connection::waitUntilFinished));
+
+ //
+ // We're done, now we can throw away all connections.
+ //
+ _connections.clear();
}
EndpointPtr
@@ -283,16 +369,17 @@ IceInternal::IncomingConnectionFactory::equivalent(const EndpointPtr& endp) cons
list<ConnectionPtr>
IceInternal::IncomingConnectionFactory::connections() const
{
- ::IceUtil::Mutex::Lock sync(*this);
+ ::IceUtil::Monitor< ::IceUtil::Mutex>::Lock sync(*this);
+
+ list<ConnectionPtr> result;
//
- // Reap destroyed connections.
+ // Only copy connections which have not been destroyed.
//
- list<ConnectionPtr>& connections = const_cast<list<ConnectionPtr>& >(_connections);
- connections.erase(remove_if(connections.begin(), connections.end(), ::Ice::constMemFun(&Connection::destroyed)),
- connections.end());
+ remove_copy_if(_connections.begin(), _connections.end(), back_inserter(result),
+ ::Ice::constMemFun(&Connection::isDestroyed));
- return _connections;
+ return result;
}
bool
@@ -310,7 +397,7 @@ IceInternal::IncomingConnectionFactory::read(BasicStream&)
void
IceInternal::IncomingConnectionFactory::message(BasicStream&, const ThreadPoolPtr& threadPool)
{
- ::IceUtil::Mutex::Lock sync(*this);
+ ::IceUtil::Monitor< ::IceUtil::Mutex>::Lock sync(*this);
if(_state != StateActive)
{
@@ -320,10 +407,11 @@ IceInternal::IncomingConnectionFactory::message(BasicStream&, const ThreadPoolPt
}
//
- // Reap destroyed connections.
+ // Reap connections for which destruction has completed.
//
- _connections.erase(remove_if(_connections.begin(), _connections.end(), ::Ice::constMemFun(&Connection::destroyed)),
- _connections.end());
+ _connections.erase(remove_if(_connections.begin(), _connections.end(),
+ ::Ice::constMemFun(&Connection::isFinished)),
+ _connections.end());
//
// Now accept a new connection.
@@ -394,7 +482,7 @@ IceInternal::IncomingConnectionFactory::message(BasicStream&, const ThreadPoolPt
void
IceInternal::IncomingConnectionFactory::finished(const ThreadPoolPtr& threadPool)
{
- ::IceUtil::Mutex::Lock sync(*this);
+ ::IceUtil::Monitor< ::IceUtil::Mutex>::Lock sync(*this);
threadPool->promoteFollower();
@@ -405,12 +493,8 @@ IceInternal::IncomingConnectionFactory::finished(const ThreadPoolPtr& threadPool
else if(_state == StateClosed)
{
_acceptor->close();
-
- //
- // We don't need the adapter anymore after we closed the
- // acceptor.
- //
- _adapter = 0;
+ _acceptor = 0;
+ notifyAll();
}
}
@@ -438,9 +522,9 @@ IceInternal::IncomingConnectionFactory::IncomingConnectionFactory(const Instance
EventHandler(instance),
_endpoint(endpoint),
_adapter(adapter),
+ _registeredWithPool(false),
_warn(_instance->properties()->getPropertyAsInt("Ice.Warn.Connections") > 0),
- _state(StateHolding),
- _registeredWithPool(false)
+ _state(StateHolding)
{
DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides();
if(defaultsAndOverrides->overrideTimeout)
@@ -456,16 +540,10 @@ IceInternal::IncomingConnectionFactory::IncomingConnectionFactory(const Instance
ConnectionPtr connection = new Connection(_instance, _transceiver, _endpoint, _adapter);
connection->validate();
_connections.push_back(connection);
-
- //
- // We don't need an adapter anymore if we don't use an
- // acceptor.
- //
- _adapter = 0;
}
else
{
- const_cast<AcceptorPtr&>(_acceptor) = _endpoint->acceptor(const_cast<EndpointPtr&>(_endpoint));
+ _acceptor = _endpoint->acceptor(const_cast<EndpointPtr&>(_endpoint));
assert(_acceptor);
_acceptor->listen();
}
@@ -480,14 +558,8 @@ IceInternal::IncomingConnectionFactory::IncomingConnectionFactory(const Instance
IceInternal::IncomingConnectionFactory::~IncomingConnectionFactory()
{
assert(_state == StateClosed);
- assert(!_adapter);
-}
-
-void
-IceInternal::IncomingConnectionFactory::destroy()
-{
- ::IceUtil::Mutex::Lock sync(*this);
- setState(StateClosed);
+ assert(!_acceptor);
+ assert(_connections.empty());
}
void
@@ -542,13 +614,12 @@ IceInternal::IncomingConnectionFactory::setState(State state)
for_each(_connections.begin(), _connections.end(),
bind2nd(Ice::voidMemFun1(&Connection::destroy), Connection::ObjectAdapterDeactivated));
#endif
- _connections.clear();
-
break;
}
}
_state = state;
+ notifyAll();
}
void
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;
};
}
diff --git a/cpp/src/Ice/Direct.cpp b/cpp/src/Ice/Direct.cpp
index 3a40175c783..59be398b3c1 100644
--- a/cpp/src/Ice/Direct.cpp
+++ b/cpp/src/Ice/Direct.cpp
@@ -13,7 +13,7 @@
// **********************************************************************
#include <Ice/Direct.h>
-#include <Ice/ObjectAdapterI.h> // We need ObjectAdapterI, not ObjectAdapter, because of inc/decUsageCount().
+#include <Ice/ObjectAdapterI.h> // We need ObjectAdapterI, not ObjectAdapter, because of inc/decDirectCount().
#include <Ice/ServantLocator.h>
#include <Ice/Reference.h>
#include <Ice/Object.h>
@@ -26,10 +26,10 @@ using namespace IceInternal;
IceInternal::Direct::Direct(const Current& current) :
_current(current)
{
+ dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->incDirectCount();
+
try
{
- dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->incUsageCount();
-
_servant = _current.adapter->identityToServant(_current.id);
if(!_servant && !_current.id.category.empty())
@@ -82,12 +82,12 @@ IceInternal::Direct::Direct(const Current& current) :
}
catch(...)
{
- dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount();
+ dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decDirectCount();
throw;
}
}
- dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount();
+ dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decDirectCount();
throw;
}
}
@@ -102,12 +102,12 @@ IceInternal::Direct::~Direct()
}
catch(...)
{
- dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount();
+ dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decDirectCount();
throw;
}
}
- dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount();
+ dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decDirectCount();
}
const ObjectPtr&
diff --git a/cpp/src/Ice/Incoming.cpp b/cpp/src/Ice/Incoming.cpp
index 5f1fd6b1fce..8a2d066ebb7 100644
--- a/cpp/src/Ice/Incoming.cpp
+++ b/cpp/src/Ice/Incoming.cpp
@@ -13,9 +13,10 @@
// **********************************************************************
#include <Ice/Incoming.h>
-#include <Ice/ObjectAdapterI.h> // We need ObjectAdapterI, not ObjectAdapter, because of inc/decUsageCount().
+#include <Ice/ObjectAdapter.h>
#include <Ice/ServantLocator.h>
#include <Ice/Object.h>
+#include <Ice/Connection.h>
#include <Ice/LocalException.h>
#include <Ice/Instance.h>
#include <Ice/Properties.h>
@@ -28,9 +29,10 @@ using namespace std;
using namespace Ice;
using namespace IceInternal;
-IceInternal::Incoming::Incoming(const InstancePtr& instance, const ObjectAdapterPtr& adapter,
- Connection* connection, bool compress) :
+IceInternal::Incoming::Incoming(const InstancePtr& instance, const ObjectAdapterPtr& adapter, Connection* connection,
+ bool response, bool compress) :
_connection(connection),
+ _response(response),
_compress(compress),
_is(instance),
_os(instance)
@@ -38,7 +40,7 @@ IceInternal::Incoming::Incoming(const InstancePtr& instance, const ObjectAdapter
_current.adapter = adapter;
}
-bool
+void
IceInternal::Incoming::invoke()
{
//
@@ -62,7 +64,7 @@ IceInternal::Incoming::invoke()
_is.startReadEncaps();
- if(_connection) // Response expected?
+ if(_response)
{
assert(_os.b.size() == headerSize + 4); // Dispatch status position.
_os.write(static_cast<Byte>(0));
@@ -81,8 +83,6 @@ IceInternal::Incoming::invoke()
{
if(_current.adapter)
{
- dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->incUsageCount();
-
_servant = _current.adapter->identityToServant(_current.id);
if(!_servant && !_current.id.category.empty())
@@ -135,21 +135,12 @@ IceInternal::Incoming::invoke()
// call is not finished yet.
//
assert(status == DispatchOK);
- return true;
+ return;
}
}
}
catch(RequestFailedException& ex)
{
- if(_is.b.empty()) // Asynchronous dispatch?
- {
- Error out(_os.instance()->logger());
- out << "dispatch exception in asynchronous method: " << ex;
- ex.ice_throw();
- }
-
- finishInvoke();
-
if(ex.id.name.empty())
{
ex.id = _current.id;
@@ -165,7 +156,9 @@ IceInternal::Incoming::invoke()
ex.operation = _current.operation;
}
- if(_connection) // Response expected?
+ warning(ex);
+
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
@@ -190,21 +183,14 @@ IceInternal::Incoming::invoke()
_os.write(ex.operation);
}
- warning(ex);
- return false; // Regular, non-asynchronous dispatch.
+ finishInvoke();
+ return;
}
catch(const LocalException& ex)
{
- if(_is.b.empty()) // Asynchronous dispatch?
- {
- Error out(_os.instance()->logger());
- out << "dispatch exception in asynchronous method: " << ex;
- ex.ice_throw();
- }
-
- finishInvoke();
+ warning(ex);
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
@@ -214,21 +200,14 @@ IceInternal::Incoming::invoke()
_os.write(str.str());
}
- warning(ex);
- return false; // Regular, non-asynchronous dispatch.
+ finishInvoke();
+ return;
}
catch(const UserException& ex)
{
- if(_is.b.empty()) // Asynchronous dispatch?
- {
- Error out(_os.instance()->logger());
- out << "dispatch exception in asynchronous method: " << ex;
- ex.ice_throw();
- }
-
- finishInvoke();
+ warning(ex);
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
@@ -238,21 +217,14 @@ IceInternal::Incoming::invoke()
_os.write(str.str());
}
- warning(ex);
- return false; // Regular, non-asynchronous dispatch.
+ finishInvoke();
+ return;
}
catch(const Exception& ex)
{
- if(_is.b.empty()) // Asynchronous dispatch?
- {
- Error out(_os.instance()->logger());
- out << "dispatch exception in asynchronous method: " << ex;
- ex.ice_throw();
- }
-
- finishInvoke();
+ warning(ex);
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
@@ -262,21 +234,14 @@ IceInternal::Incoming::invoke()
_os.write(str.str());
}
- warning(ex);
- return false; // Regular, non-asynchronous dispatch.
+ finishInvoke();
+ return;
}
catch(const std::exception& ex)
{
- if(_is.b.empty()) // Asynchronous dispatch?
- {
- Error out(_os.instance()->logger());
- out << "dispatch exception in asynchronous method: std::exception: " << ex.what();
- throw UnknownException(__FILE__, __LINE__);
- }
-
- finishInvoke();
+ warning(string("std::exception: ") + ex.what());
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
@@ -286,21 +251,14 @@ IceInternal::Incoming::invoke()
_os.write(str.str());
}
- warning(string("std::exception: ") + ex.what());
- return false; // Regular, non-asynchronous dispatch.
+ finishInvoke();
+ return;
}
catch(...)
{
- if(_is.b.empty()) // Asynchronous dispatch?
- {
- Error out(_os.instance()->logger());
- out << "dispatch exception in asynchronous method: unknown c++ exception";
- throw UnknownException(__FILE__, __LINE__);
- }
-
- finishInvoke();
+ warning("unknown c++ exception");
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
@@ -309,8 +267,8 @@ IceInternal::Incoming::invoke()
_os.write(reason);
}
- warning("unknown c++ exception");
- return false; // Regular, non-asynchronous dispatch.
+ finishInvoke();
+ return;
}
//
@@ -319,9 +277,7 @@ IceInternal::Incoming::invoke()
// the caller of this operation.
//
- finishInvoke();
-
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
@@ -344,7 +300,7 @@ IceInternal::Incoming::invoke()
}
}
- return false; // Regular, non-asynchronous dispatch.
+ finishInvoke();
}
BasicStream*
@@ -364,26 +320,24 @@ IceInternal::Incoming::finishInvoke()
{
if(_locator && _servant)
{
- try
- {
- _locator->finished(_current, _servant, _cookie);
- }
- catch(...)
- {
- if(_current.adapter)
- {
- dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount();
- }
- throw;
- }
+ _locator->finished(_current, _servant, _cookie);
+ }
+
+ _is.endReadEncaps();
+
+ //
+ // Send a response if necessary. If we don't need to send a
+ // response, we still need to tell the connection that we're
+ // finished with dispatching.
+ //
+ if(_response)
+ {
+ _connection->sendResponse(&_os, _compress);
}
-
- if(_current.adapter)
+ else
{
- dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount();
+ _connection->sendNoResponse();
}
-
- _is.endReadEncaps();
}
void
diff --git a/cpp/src/Ice/IncomingAsync.cpp b/cpp/src/Ice/IncomingAsync.cpp
index a6e1559c5ee..77eec9331f1 100644
--- a/cpp/src/Ice/IncomingAsync.cpp
+++ b/cpp/src/Ice/IncomingAsync.cpp
@@ -13,7 +13,6 @@
// **********************************************************************
#include <Ice/IncomingAsync.h>
-#include <Ice/ObjectAdapterI.h> // We need ObjectAdapterI, not ObjectAdapter, because of inc/decUsageCount().
#include <Ice/ServantLocator.h>
#include <Ice/Object.h>
#include <Ice/Incoming.h>
@@ -35,13 +34,14 @@ void IceInternal::incRef(AMD_Object_ice_invoke* p) { p->__incRef(); }
void IceInternal::decRef(AMD_Object_ice_invoke* p) { p->__decRef(); }
IceInternal::IncomingAsync::IncomingAsync(Incoming& in) :
+ _instance(in._is.instance()),
_current(in._current),
_servant(in._servant),
_locator(in._locator),
_cookie(in._cookie),
_connection(in._connection),
+ _response(in._response),
_compress(in._compress),
- _instance(in._is.instance()),
_is(_instance),
_os(_instance)
{
@@ -52,9 +52,7 @@ IceInternal::IncomingAsync::IncomingAsync(Incoming& in) :
void
IceInternal::IncomingAsync::__response(bool ok)
{
- finishInvoke();
-
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
@@ -66,9 +64,9 @@ IceInternal::IncomingAsync::__response(bool ok)
{
*(_os.b.begin() + headerSize + 4) = static_cast<Byte>(DispatchUserException); // Dispatch status position.
}
-
- _connection->sendResponse(&_os, _compress);
}
+
+ finishInvoke();
}
void
@@ -80,8 +78,6 @@ IceInternal::IncomingAsync::__exception(const Exception& exc)
}
catch(RequestFailedException& ex)
{
- finishInvoke();
-
if(ex.id.name.empty())
{
ex.id = _current.id;
@@ -97,7 +93,7 @@ IceInternal::IncomingAsync::__exception(const Exception& exc)
ex.operation = _current.operation;
}
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
@@ -120,15 +116,13 @@ IceInternal::IncomingAsync::__exception(const Exception& exc)
ex.id.__write(&_os);
_os.write(ex.facet);
_os.write(ex.operation);
-
- _connection->sendResponse(&_os, _compress);
}
+
+ finishInvoke();
}
catch(const LocalException& ex)
{
- finishInvoke();
-
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
@@ -136,15 +130,13 @@ IceInternal::IncomingAsync::__exception(const Exception& exc)
ostringstream str;
str << ex;
_os.write(str.str());
-
- _connection->sendResponse(&_os, _compress);
}
+
+ finishInvoke();
}
catch(const UserException& ex)
{
- finishInvoke();
-
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
@@ -152,15 +144,13 @@ IceInternal::IncomingAsync::__exception(const Exception& exc)
ostringstream str;
str << ex;
_os.write(str.str());
-
- _connection->sendResponse(&_os, _compress);
}
+
+ finishInvoke();
}
catch(const Exception& ex)
{
- finishInvoke();
-
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
@@ -168,18 +158,16 @@ IceInternal::IncomingAsync::__exception(const Exception& exc)
ostringstream str;
str << ex;
_os.write(str.str());
-
- _connection->sendResponse(&_os, _compress);
}
+
+ finishInvoke();
}
}
void
IceInternal::IncomingAsync::__exception(const std::exception& ex)
{
- finishInvoke();
-
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
@@ -187,33 +175,30 @@ IceInternal::IncomingAsync::__exception(const std::exception& ex)
ostringstream str;
str << "std::exception: " << ex.what();
_os.write(str.str());
-
- _connection->sendResponse(&_os, _compress);
}
+
+ finishInvoke();
}
void
IceInternal::IncomingAsync::__exception()
{
- if(_connection) // Response expected?
+ if(_response)
{
_os.endWriteEncaps();
_os.b.resize(headerSize + 4); // Dispatch status position.
_os.write(static_cast<Byte>(DispatchUnknownException));
string reason = "unknown c++ exception";
_os.write(reason);
-
- _connection->sendResponse(&_os, _compress);
}
+
+ finishInvoke();
}
void
IceInternal::IncomingAsync::__fatal(const LocalException& ex)
{
- if(_connection)
- {
- _connection->exception(ex);
- }
+ _connection->exception(ex);
}
BasicStream*
@@ -233,20 +218,24 @@ IceInternal::IncomingAsync::finishInvoke()
{
if(_locator && _servant)
{
- try
- {
- _locator->finished(_current, _servant, _cookie);
- }
- catch(...)
- {
- dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount();
- throw;
- }
+ _locator->finished(_current, _servant, _cookie);
}
-
- dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount();
-
+
_is.endReadEncaps();
+
+ //
+ // Send a response if necessary. If we don't need to send a
+ // response, we still need to tell the connection that we're
+ // finished with dispatching.
+ //
+ if(_response)
+ {
+ _connection->sendResponse(&_os, _compress);
+ }
+ else
+ {
+ _connection->sendNoResponse();
+ }
}
IceAsync::Ice::AMD_Object_ice_invoke::AMD_Object_ice_invoke(Incoming& in) :
diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp
index 614803f09a7..75894b607bf 100644
--- a/cpp/src/Ice/Instance.cpp
+++ b/cpp/src/Ice/Instance.cpp
@@ -499,121 +499,63 @@ IceInternal::Instance::finishSetup(int& argc, char* argv[])
void
IceInternal::Instance::destroy()
{
- ThreadPoolPtr clientThreadPool;
- ThreadPoolPtr serverThreadPool;
+ assert(!_destroyed);
+
+ _objectAdapterFactory->shutdown();
+ _objectAdapterFactory->waitForShutdown();
+
+ _outgoingConnectionFactory->destroy();
+ _outgoingConnectionFactory->waitUntilFinished();
{
IceUtil::RecMutex::Lock sync(*this);
- if(_destroyed)
- {
- return; // Don't destroy twice.
- }
-
- _destroyed = true;
+ _objectAdapterFactory = 0;
+ _outgoingConnectionFactory = 0;
- if(_objectAdapterFactory)
+ if(_serverThreadPool)
{
- // Don't shut down the object adapters -- the communicator
- // must do this before it destroys this object.
- _objectAdapterFactory = 0;
+ _serverThreadPool->destroy();
+ _serverThreadPool->joinWithAllThreads();
+ _serverThreadPool = 0;
}
- if(_outgoingConnectionFactory)
+ if(_clientThreadPool)
{
- _outgoingConnectionFactory->destroy();
- _outgoingConnectionFactory = 0;
+ _clientThreadPool->destroy();
+ _clientThreadPool->joinWithAllThreads();
+ _clientThreadPool = 0;
}
- //
- // We destroy the thread pool outside the thread
- // synchronization.
- //
- clientThreadPool = _clientThreadPool;
- _clientThreadPool = 0;
- serverThreadPool = _serverThreadPool;
- _serverThreadPool = 0;
- }
-
- //
- // We must destroy the outgoing connection factory before we
- // destroy the client thread pool.
- //
- if(clientThreadPool)
- {
- clientThreadPool->waitUntilFinished();
- clientThreadPool->destroy();
- clientThreadPool->joinWithAllThreads();
- }
-
- //
- // We must destroy the object adapter factory before we destroy
- // the server thread pool.
- //
- if(serverThreadPool)
- {
- serverThreadPool->waitUntilFinished();
- serverThreadPool->destroy();
- serverThreadPool->joinWithAllThreads();
- }
-
- {
- IceUtil::RecMutex::Lock sync(*this);
-
- if(_servantFactoryManager)
- {
- _servantFactoryManager->destroy();
- _servantFactoryManager = 0;
- }
+ _servantFactoryManager->destroy();
+ _servantFactoryManager = 0;
- if(_userExceptionFactoryManager)
- {
- _userExceptionFactoryManager->destroy();
- _userExceptionFactoryManager = 0;
- }
+ _userExceptionFactoryManager->destroy();
+ _userExceptionFactoryManager = 0;
- if(_referenceFactory)
- {
- _referenceFactory->destroy();
- _referenceFactory = 0;
- }
+ _referenceFactory->destroy();
+ _referenceFactory = 0;
- if(_proxyFactory)
- {
- // No destroy function defined
- // _proxyFactory->destroy();
- _proxyFactory = 0;
- }
+ // No destroy function defined.
+ // _proxyFactory->destroy();
+ _proxyFactory = 0;
- if(_routerManager)
- {
- _routerManager->destroy();
- _routerManager = 0;
- }
+ _routerManager->destroy();
+ _routerManager = 0;
- if(_locatorManager)
- {
- _locatorManager->destroy();
- _locatorManager = 0;
- }
+ _locatorManager->destroy();
+ _locatorManager = 0;
- if(_endpointFactoryManager)
- {
- _endpointFactoryManager->destroy();
- _endpointFactoryManager = 0;
- }
+ _endpointFactoryManager->destroy();
+ _endpointFactoryManager = 0;
- if(_pluginManager)
- {
- _pluginManager->destroy();
- _pluginManager = 0;
- }
+ _pluginManager->destroy();
+ _pluginManager = 0;
- if(_dynamicLibraryList)
- {
- // No destroy function defined
- // _dynamicLibraryList->destroy();
- _dynamicLibraryList = 0;
- }
+ // No destroy function defined.
+ // _dynamicLibraryList->destroy();
+ _dynamicLibraryList = 0;
+
+ _destroyed = true;
}
}
diff --git a/cpp/src/Ice/ObjectAdapterFactory.cpp b/cpp/src/Ice/ObjectAdapterFactory.cpp
index f10d21a3cc9..b4419cf68ce 100644
--- a/cpp/src/Ice/ObjectAdapterFactory.cpp
+++ b/cpp/src/Ice/ObjectAdapterFactory.cpp
@@ -14,6 +14,7 @@
#include <Ice/ObjectAdapterFactory.h>
#include <Ice/ObjectAdapterI.h>
+#include <Ice/LocalException.h>
#include <Ice/Functional.h>
using namespace std;
@@ -26,18 +27,60 @@ void IceInternal::decRef(ObjectAdapterFactory* p) { p->__decRef(); }
void
IceInternal::ObjectAdapterFactory::shutdown()
{
- IceUtil::Mutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ //
+ // Ignore shutdown requests if the object adapter factory has
+ // already been shut down.
+ //
+ if(!_instance)
+ {
+ return;
+ }
+
for_each(_adapters.begin(), _adapters.end(),
Ice::secondVoidMemFun<string, ObjectAdapter>(&ObjectAdapter::deactivate));
+
+ _instance = 0;
+ _communicator = 0;
+ notifyAll();
+}
+
+void
+IceInternal::ObjectAdapterFactory::waitForShutdown()
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ //
+ // First we wait for the shutdown of the factory itself.
+ //
+ while(_instance)
+ {
+ wait();
+ }
+
+ //
+ // Now we wait for deactivation of each object adapter.
+ //
+ for_each(_adapters.begin(), _adapters.end(),
+ Ice::secondVoidMemFun<string, ObjectAdapter>(&ObjectAdapter::waitForDeactivate));
+
+ //
+ // We're done, now we can throw away the object adapters.
+ //
_adapters.clear();
}
ObjectAdapterPtr
IceInternal::ObjectAdapterFactory::createObjectAdapter(const string& name, const string& endpts, const string& id)
{
- IceUtil::Mutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ if(!_instance)
+ {
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
+ }
map<string, ObjectAdapterIPtr>::iterator p = _adapters.find(name);
if(p != _adapters.end())
@@ -53,13 +96,25 @@ IceInternal::ObjectAdapterFactory::createObjectAdapter(const string& name, const
ObjectAdapterPtr
IceInternal::ObjectAdapterFactory::findObjectAdapter(const ObjectPrx& proxy)
{
- IceUtil::Mutex::Lock sync(*this);
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ if(!_instance)
+ {
+ throw CommunicatorDestroyedException(__FILE__, __LINE__);
+ }
for(map<string, ObjectAdapterIPtr>::iterator p = _adapters.begin(); p != _adapters.end(); ++p)
{
- if(p->second->isLocal(proxy))
+ try
{
- return p->second;
+ if(p->second->isLocal(proxy))
+ {
+ return p->second;
+ }
+ }
+ catch(const ObjectAdapterDeactivatedException&)
+ {
+ // Ignore.
}
}
@@ -72,3 +127,10 @@ IceInternal::ObjectAdapterFactory::ObjectAdapterFactory(const InstancePtr& insta
_communicator(communicator)
{
}
+
+IceInternal::ObjectAdapterFactory::~ObjectAdapterFactory()
+{
+ assert(!_instance);
+ assert(!_communicator);
+ assert(_adapters.empty());
+}
diff --git a/cpp/src/Ice/ObjectAdapterFactory.h b/cpp/src/Ice/ObjectAdapterFactory.h
index e6c8262453f..5473a990c8a 100644
--- a/cpp/src/Ice/ObjectAdapterFactory.h
+++ b/cpp/src/Ice/ObjectAdapterFactory.h
@@ -17,21 +17,25 @@
#include <Ice/ObjectAdapterI.h>
#include <IceUtil/Mutex.h>
+#include <IceUtil/Monitor.h>
namespace IceInternal
{
-class ObjectAdapterFactory : public ::IceUtil::Shared, public ::IceUtil::Mutex
+class ObjectAdapterFactory : public ::IceUtil::Shared, public ::IceUtil::Monitor< ::IceUtil::Mutex>
{
public:
void shutdown();
+ void waitForShutdown();
+
::Ice::ObjectAdapterPtr createObjectAdapter(const std::string&, const std::string&, const std::string&);
::Ice::ObjectAdapterPtr findObjectAdapter(const ::Ice::ObjectPrx&);
private:
ObjectAdapterFactory(const InstancePtr&, const ::Ice::CommunicatorPtr&);
+ virtual ~ObjectAdapterFactory();
friend class Instance;
InstancePtr _instance;
diff --git a/cpp/src/Ice/ObjectAdapterI.cpp b/cpp/src/Ice/ObjectAdapterI.cpp
index 4a78165d898..5ccbe2a7871 100644
--- a/cpp/src/Ice/ObjectAdapterI.cpp
+++ b/cpp/src/Ice/ObjectAdapterI.cpp
@@ -46,12 +46,7 @@ Ice::ObjectAdapterI::getCommunicator()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
+ checkForDeactivation();
return _communicator;
}
@@ -61,12 +56,7 @@ Ice::ObjectAdapterI::activate()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
+ checkForDeactivation();
if(!_printAdapterReadyDone)
{
@@ -120,43 +110,46 @@ Ice::ObjectAdapterI::hold()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
+ checkForDeactivation();
for_each(_incomingConnectionFactories.begin(), _incomingConnectionFactories.end(),
Ice::voidMemFun(&IncomingConnectionFactory::hold));
}
void
+Ice::ObjectAdapterI::waitForHold()
+{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ checkForDeactivation();
+
+ for_each(_incomingConnectionFactories.begin(), _incomingConnectionFactories.end(),
+ Ice::constVoidMemFun(&IncomingConnectionFactory::waitUntilHolding));
+}
+
+void
Ice::ObjectAdapterI::deactivate()
{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ //
+ // Ignore deactivation requests if the object adapter has already
+ // been deactivated.
+ //
+ if(!_instance)
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- if(!_instance)
- {
- //
- // Ignore deactivation requests if the Object Adapter has
- // already been deactivated.
- //
- return;
- }
-
- for_each(_incomingConnectionFactories.begin(), _incomingConnectionFactories.end(),
- Ice::voidMemFun(&IncomingConnectionFactory::destroy));
- _incomingConnectionFactories.clear();
-
- _instance->outgoingConnectionFactory()->removeAdapter(this);
-
- _instance = 0;
- _communicator = 0;
+ return;
}
+
+ for_each(_incomingConnectionFactories.begin(), _incomingConnectionFactories.end(),
+ Ice::voidMemFun(&IncomingConnectionFactory::destroy));
+
+ _instance->outgoingConnectionFactory()->removeAdapter(this);
+
+ _instance = 0;
+ _communicator = 0;
- decUsageCount();
+ notifyAll();
}
void
@@ -164,14 +157,62 @@ Ice::ObjectAdapterI::waitForDeactivate()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- assert(_usageCount >= 0);
-
- while(_usageCount > 0)
+ //
+ // First we wait for deactivation of the adapter itself, and for
+ // the return of all direct method calls using this adapter.
+ //
+ while(_instance || _directCount > 0)
{
wait();
}
- assert(_usageCount == 0);
+ //
+ // Now we wait for until all incoming connection factories are
+ // finished.
+ //
+ for_each(_incomingConnectionFactories.begin(), _incomingConnectionFactories.end(),
+ Ice::voidMemFun(&IncomingConnectionFactory::waitUntilFinished));
+
+ //
+ // We're done, now we can throw away all incoming connection
+ // factories.
+ //
+ _incomingConnectionFactories.clear();
+
+ //
+ // Now it's also time to clean up the active servant map.
+ //
+ _activeServantMap.clear();
+ _activeServantMapHint = _activeServantMap.end();
+
+ //
+ // And the servant locators, too.
+ //
+ std::map<std::string, ServantLocatorPtr>::iterator p;
+ for(p = _locatorMap.begin(); p != _locatorMap.end(); ++p)
+ {
+ try
+ {
+ p->second->deactivate();
+ }
+ catch(const Exception& ex)
+ {
+ Error out(_logger);
+ out << "exception during locator deactivation:\n"
+ << "object adapter: `" << _name << "'\n"
+ << "locator prefix: `" << p->first << "'\n"
+ << ex;
+ }
+ catch(...)
+ {
+ Error out(_logger);
+ out << "unknown exception during locator deactivation:\n"
+ << "object adapter: `" << _name << "'\n"
+ << "locator prefix: `" << p->first << "'";
+ }
+ }
+ _locatorMap.clear();
+ _locatorMapHint = _locatorMap.end();
}
ObjectPrx
@@ -179,16 +220,10 @@ Ice::ObjectAdapterI::add(const ObjectPtr& object, const Identity& ident)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
-
+ checkForDeactivation();
checkIdentity(ident);
- if( (_activeServantMapHint != _activeServantMap.end() && _activeServantMapHint->first == ident)
+ if((_activeServantMapHint != _activeServantMap.end() && _activeServantMapHint->first == ident)
|| _activeServantMap.find(ident) != _activeServantMap.end())
{
AlreadyRegisteredException ex(__FILE__, __LINE__);
@@ -207,12 +242,7 @@ Ice::ObjectAdapterI::addWithUUID(const ObjectPtr& object)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
+ checkForDeactivation();
Identity ident;
ident.name = IceUtil::generateUUID();
@@ -227,13 +257,7 @@ Ice::ObjectAdapterI::remove(const Identity& ident)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
-
+ checkForDeactivation();
checkIdentity(ident);
ObjectDict::iterator p = _activeServantMap.find(ident);
@@ -254,14 +278,9 @@ Ice::ObjectAdapterI::addServantLocator(const ServantLocatorPtr& locator, const s
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
+ checkForDeactivation();
- if( (_locatorMapHint != _locatorMap.end() && _locatorMapHint->first == prefix)
+ if((_locatorMapHint != _locatorMap.end() && _locatorMapHint->first == prefix)
|| _locatorMap.find(prefix) != _locatorMap.end())
{
AlreadyRegisteredException ex(__FILE__, __LINE__);
@@ -278,12 +297,7 @@ Ice::ObjectAdapterI::removeServantLocator(const string& prefix)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
+ checkForDeactivation();
map<string, ServantLocatorPtr>::iterator p = _locatorMap.end();
@@ -326,20 +340,7 @@ Ice::ObjectAdapterI::findServantLocator(const string& prefix)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- //
- // Don't check whether deactivation has been initiated. This
- // operation might be called (e.g., from Incoming or Direct)
- // after deactivation has been initiated, but before
- // deactivation has been completed.
- //
- /*
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
- */
+ checkForDeactivation();
map<string, ServantLocatorPtr>::iterator p = _locatorMap.end();
@@ -372,25 +373,12 @@ Ice::ObjectAdapterI::identityToServant(const Identity& ident)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- //
- // Don't check whether deactivation has been initiated. This
- // operation might be called (e.g., from Incoming or Direct)
- // after deactivation has been initiated, but before
- // deactivation has been completed.
- //
- /*
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
- */
+ checkForDeactivation();
//
- // Don't call checkIdentity. We simply want null to be
- // returned (e.g., for Direct, Incoming) in case the identity
- // is incorrect and therefore no servant can be found.
+ // Don't call checkIdentity. We simply want null to returned
+ // (e.g., for Direct, Incoming) in case the identity is incorrect
+ // and therefore no servant can be found.
//
/*
checkIdentity(ident);
@@ -426,51 +414,33 @@ Ice::ObjectAdapterI::proxyToServant(const ObjectPrx& proxy)
ObjectPrx
Ice::ObjectAdapterI::createProxy(const Identity& ident)
{
+ IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+
+ checkForDeactivation();
checkIdentity(ident);
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
-
return newProxy(ident);
}
ObjectPrx
Ice::ObjectAdapterI::createDirectProxy(const Identity& ident)
{
- checkIdentity(ident);
-
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
-
+ checkForDeactivation();
+ checkIdentity(ident);
+
return newDirectProxy(ident);
}
ObjectPrx
Ice::ObjectAdapterI::createReverseProxy(const Identity& ident)
{
- checkIdentity(ident);
-
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
-
+ checkForDeactivation();
+ checkIdentity(ident);
+
//
// Create a reference and return a reverse proxy for this reference.
//
@@ -485,12 +455,7 @@ Ice::ObjectAdapterI::addRouter(const RouterPrx& router)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
+ checkForDeactivation();
RouterInfoPtr routerInfo = _instance->routerManager()->get(router);
if(routerInfo)
@@ -530,12 +495,7 @@ Ice::ObjectAdapterI::setLocator(const LocatorPrx& locator)
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
+ checkForDeactivation();
_locatorInfo = _instance->locatorManager()->get(locator);
}
@@ -545,12 +505,7 @@ Ice::ObjectAdapterI::getIncomingConnections() const
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- if(!_instance)
- {
- ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
- ex.name = _name;
- throw ex;
- }
+ checkForDeactivation();
list<ConnectionPtr> connections;
vector<IncomingConnectionFactoryPtr>::const_iterator p;
@@ -563,72 +518,32 @@ Ice::ObjectAdapterI::getIncomingConnections() const
}
void
-Ice::ObjectAdapterI::incUsageCount()
+Ice::ObjectAdapterI::incDirectCount()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- //
- // Don't check whether deactivation has been initiated. This
- // operation might be called (e.g., from Incoming or Direct)
- // after deactivation has been initiated, but before
- // deactivation has been completed.
- //
- /*
- assert(_instance);
- */
- assert(_usageCount >= 0);
- ++_usageCount;
+ checkForDeactivation();
+
+ assert(_directCount >= 0);
+ ++_directCount;
}
void
-Ice::ObjectAdapterI::decUsageCount()
+Ice::ObjectAdapterI::decDirectCount()
{
IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
//
- // The object adapter may already be deactivated when the usage
- // count is decremented, thus no check for prior deactivation,
- // i.e., no assert(_instance).
+ // The object adapter may already have been deactivated when the
+ // direct count is decremented, thus there is no check for prior
+ // deactivation.
//
- assert(_usageCount > 0);
- --_usageCount;
- if(_usageCount == 0)
- {
- _activeServantMap.clear();
- _activeServantMapHint = _activeServantMap.end();
-
- std::map<std::string, ServantLocatorPtr>::iterator p;
- for(p = _locatorMap.begin(); p != _locatorMap.end(); ++p)
- {
- try
- {
- p->second->deactivate();
- }
- catch(const Exception& ex)
- {
- Error out(_logger);
- out << "exception during locator deactivation:\n"
- << "object adapter: `" << _name << "'\n"
- << "locator prefix: `" << p->first << "'\n"
- << ex;
- }
- catch(...)
- {
- Error out(_logger);
- out << "unknown exception during locator deactivation:\n"
- << "object adapter: `" << _name << "'\n"
- << "locator prefix: `" << p->first << "'";
- }
- }
-// for_each(_locatorMap.begin(), _locatorMap.end(),
-// Ice::secondVoidMemFun<string, ServantLocator>(&ServantLocator::deactivate));
- _locatorMap.clear();
- _locatorMapHint = _locatorMap.end();
- _logger = 0;
-
+ assert(_directCount > 0);
+ if(--_directCount == 0)
+ {
notifyAll();
- }
+ }
}
Ice::ObjectAdapterI::ObjectAdapterI(const InstancePtr& instance, const CommunicatorPtr& communicator,
@@ -641,7 +556,7 @@ Ice::ObjectAdapterI::ObjectAdapterI(const InstancePtr& instance, const Communica
_logger(instance->logger()),
_activeServantMapHint(_activeServantMap.end()),
_locatorMapHint(_locatorMap.end()),
- _usageCount(1)
+ _directCount(0)
{
string s(endpts);
transform(s.begin(), s.end(), s.begin(), ::tolower);
@@ -683,7 +598,7 @@ Ice::ObjectAdapterI::ObjectAdapterI(const InstancePtr& instance, const Communica
EndpointPtr endp = _instance->endpointFactoryManager()->create(es);
_incomingConnectionFactories.push_back(new IncomingConnectionFactory(instance, endp, this));
- end = end + 1;
+ ++end;
}
}
catch(...)
@@ -697,18 +612,19 @@ Ice::ObjectAdapterI::ObjectAdapterI(const InstancePtr& instance, const Communica
Ice::ObjectAdapterI::~ObjectAdapterI()
{
- assert(_usageCount == 0);
-
- if(_instance)
- {
- Warning out(_instance->logger());
- out << "object adapter has not been deactivated";
- }
+ assert(!_instance);
+ assert(!_communicator);
+ assert(_incomingConnectionFactories.empty());
+ assert(_activeServantMap.empty());
+ assert(_locatorMap.empty());
+ assert(_directCount == 0);
}
ObjectPrx
Ice::ObjectAdapterI::newProxy(const Identity& ident) const
{
+ checkForDeactivation();
+
if(_id.empty())
{
return newDirectProxy(ident);
@@ -732,6 +648,8 @@ Ice::ObjectAdapterI::newProxy(const Identity& ident) const
ObjectPrx
Ice::ObjectAdapterI::newDirectProxy(const Identity& ident) const
{
+ checkForDeactivation();
+
vector<EndpointPtr> endpoints;
//
@@ -760,20 +678,11 @@ Ice::ObjectAdapterI::newDirectProxy(const Identity& ident) const
}
-void
-Ice::ObjectAdapterI::checkIdentity(const Identity& ident)
-{
- if(ident.name.size() == 0)
- {
- IllegalIdentityException e(__FILE__, __LINE__);
- e.id = ident;
- throw e;
- }
-}
-
bool
Ice::ObjectAdapterI::isLocal(const ObjectPrx& proxy) const
{
+ checkForDeactivation();
+
ReferencePtr ref = proxy->__reference();
vector<EndpointPtr>::const_iterator p;
@@ -822,3 +731,25 @@ Ice::ObjectAdapterI::isLocal(const ObjectPrx& proxy) const
return false;
}
+
+void
+Ice::ObjectAdapterI::checkForDeactivation() const
+{
+ if(!_instance)
+ {
+ ObjectAdapterDeactivatedException ex(__FILE__, __LINE__);
+ ex.name = _name;
+ throw ex;
+ }
+}
+
+void
+Ice::ObjectAdapterI::checkIdentity(const Identity& ident)
+{
+ if(ident.name.size() == 0)
+ {
+ IllegalIdentityException e(__FILE__, __LINE__);
+ e.id = ident;
+ throw e;
+ }
+}
diff --git a/cpp/src/Ice/ObjectAdapterI.h b/cpp/src/Ice/ObjectAdapterI.h
index 1c5e01b9fca..6cffdd4a92f 100644
--- a/cpp/src/Ice/ObjectAdapterI.h
+++ b/cpp/src/Ice/ObjectAdapterI.h
@@ -17,6 +17,7 @@
#include <IceUtil/Shared.h>
#include <IceUtil/Mutex.h>
+#include <IceUtil/Monitor.h>
#include <Ice/ObjectAdapter.h>
#include <Ice/InstanceF.h>
#include <Ice/ObjectAdapterFactoryF.h>
@@ -44,6 +45,7 @@ public:
virtual void activate();
virtual void hold();
+ virtual void waitForHold();
virtual void deactivate();
virtual void waitForDeactivate();
@@ -67,8 +69,8 @@ public:
virtual void setLocator(const LocatorPrx&);
std::list< ::IceInternal::ConnectionPtr> getIncomingConnections() const;
- void incUsageCount();
- void decUsageCount();
+ void incDirectCount();
+ void decDirectCount();
private:
@@ -79,15 +81,16 @@ private:
ObjectPrx newProxy(const Identity&) const;
ObjectPrx newDirectProxy(const Identity&) const;
- static void checkIdentity(const Identity&);
bool isLocal(const ObjectPrx&) const;
+ void checkForDeactivation() const;
+ static void checkIdentity(const Identity&);
::IceInternal::InstancePtr _instance;
CommunicatorPtr _communicator;
bool _printAdapterReadyDone;
- std::string _name;
- std::string _id;
- LoggerPtr _logger;
+ const std::string _name;
+ const std::string _id;
+ const LoggerPtr _logger;
ObjectDict _activeServantMap;
ObjectDict::iterator _activeServantMapHint;
std::map<std::string, ServantLocatorPtr> _locatorMap;
@@ -96,8 +99,7 @@ private:
std::vector< ::IceInternal::EndpointPtr> _routerEndpoints;
IceUtil::Mutex _routerEndpointsMutex;
::IceInternal::LocatorInfoPtr _locatorInfo;
- int _usageCount;
- static const char * const _kindOfObject;
+ int _directCount; // The number of direct proxies dispatching on this object adapter.
};
}
diff --git a/cpp/src/Ice/OutgoingAsync.cpp b/cpp/src/Ice/OutgoingAsync.cpp
index 2fad7d86c0a..28cc5f85b12 100644
--- a/cpp/src/Ice/OutgoingAsync.cpp
+++ b/cpp/src/Ice/OutgoingAsync.cpp
@@ -79,14 +79,14 @@ IceInternal::OutgoingAsync::__setup(const ConnectionPtr& connection, const Refer
void
IceInternal::OutgoingAsync::__invoke()
{
- _connection->incUsageCount();
+ _connection->incProxyCount();
try
{
_connection->sendAsyncRequest(this, _compress);
}
catch(...)
{
- _connection->decUsageCount();
+ _connection->decProxyCount();
throw;
}
}
@@ -190,23 +190,23 @@ IceInternal::OutgoingAsync::__finished(BasicStream& is)
catch(const Exception& ex)
{
warnException(ex);
- _connection->decUsageCount();
+ _connection->decProxyCount();
return;
}
catch(const std::exception& ex)
{
warnException(ex);
- _connection->decUsageCount();
+ _connection->decProxyCount();
return;
}
catch(...)
{
warnException();
- _connection->decUsageCount();
+ _connection->decProxyCount();
return;
}
- _connection->decUsageCount();
+ _connection->decProxyCount();
}
void
@@ -219,23 +219,23 @@ IceInternal::OutgoingAsync::__finished(const LocalException& ex)
catch(const Exception& ex)
{
warnException(ex);
- _connection->decUsageCount();
+ _connection->decProxyCount();
return;
}
catch(const std::exception& ex)
{
warnException(ex);
- _connection->decUsageCount();
+ _connection->decProxyCount();
return;
}
catch(...)
{
warnException(ex);
- _connection->decUsageCount();
+ _connection->decProxyCount();
return;
}
- _connection->decUsageCount();
+ _connection->decProxyCount();
}
BasicStream*
diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp
index 445fe90237d..a369a9b1f16 100644
--- a/cpp/src/Ice/Proxy.cpp
+++ b/cpp/src/Ice/Proxy.cpp
@@ -768,7 +768,7 @@ IceDelegateM::Ice::Object::~Object()
{
if(__connection)
{
- __connection->decUsageCount();
+ __connection->decProxyCount();
}
}
@@ -901,12 +901,12 @@ IceDelegateM::Ice::Object::__copyFrom(const ::IceInternal::Handle< ::IceDelegate
if(from->__connection)
{
- from->__connection->incUsageCount();
+ from->__connection->incProxyCount();
}
if(__connection)
{
- __connection->decUsageCount();
+ __connection->decProxyCount();
}
__connection = from->__connection;
@@ -954,7 +954,7 @@ IceDelegateM::Ice::Object::setup(const ReferencePtr& ref)
}
assert(p != connections.end());
__connection = *p;
- __connection->incUsageCount();
+ __connection->incProxyCount();
}
else
{
@@ -994,7 +994,7 @@ IceDelegateM::Ice::Object::setup(const ReferencePtr& ref)
OutgoingConnectionFactoryPtr factory = __reference->instance->outgoingConnectionFactory();
__connection = factory->create(filteredEndpoints);
assert(__connection);
- __connection->incUsageCount();
+ __connection->incProxyCount();
}
catch(const LocalException& ex)
{
diff --git a/cpp/src/Ice/ThreadPool.cpp b/cpp/src/Ice/ThreadPool.cpp
index f5d947d9117..d33e51fea03 100644
--- a/cpp/src/Ice/ThreadPool.cpp
+++ b/cpp/src/Ice/ThreadPool.cpp
@@ -33,8 +33,7 @@ void IceInternal::decRef(ThreadPool* p) { p->__decRef(); }
void
IceInternal::ThreadPool::_register(SOCKET fd, const EventHandlerPtr& handler)
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- ++_handlers;
+ IceUtil::Mutex::Lock sync(*this);
_changes.push_back(make_pair(fd, handler));
setInterrupt(0);
}
@@ -42,7 +41,7 @@ IceInternal::ThreadPool::_register(SOCKET fd, const EventHandlerPtr& handler)
void
IceInternal::ThreadPool::unregister(SOCKET fd)
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ IceUtil::Mutex::Lock sync(*this);
_changes.push_back(make_pair(fd, EventHandlerPtr(0)));
setInterrupt(0);
}
@@ -67,28 +66,6 @@ IceInternal::ThreadPool::initiateShutdown()
}
void
-IceInternal::ThreadPool::waitUntilFinished()
-{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
-
- while(_handlers != 0 && _threadNum != 0)
- {
- wait();
- }
-
- if(_handlers != 0)
- {
- Error out(_instance->logger());
- out << "can't wait for graceful application termination in thread pool\n"
- << "since all threads have vanished";
- }
- else
- {
- assert(_handlerMap.empty());
- }
-}
-
-void
IceInternal::ThreadPool::joinWithAllThreads()
{
//
@@ -107,7 +84,6 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, bool server) :
_instance(instance),
_destroyed(false),
_lastFd(INVALID_SOCKET),
- _handlers(0),
_timeout(0),
_multipleThreads(false)
{
@@ -122,22 +98,23 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, bool server) :
_maxFd = _fdIntrRead;
_minFd = _fdIntrRead;
+ int threadNum;
if(server)
{
_timeout = _instance->properties()->getPropertyAsInt("Ice.ServerIdleTime");
- _threadNum = _instance->properties()->getPropertyAsIntWithDefault("Ice.ThreadPool.Server.Size", 10);
+ threadNum = _instance->properties()->getPropertyAsIntWithDefault("Ice.ThreadPool.Server.Size", 10);
}
else
{
- _threadNum = _instance->properties()->getPropertyAsIntWithDefault("Ice.ThreadPool.Client.Size", 1);
+ threadNum = _instance->properties()->getPropertyAsIntWithDefault("Ice.ThreadPool.Client.Size", 1);
}
- if(_threadNum < 1)
+ if(threadNum < 1)
{
- _threadNum = 1;
+ threadNum = 1;
}
- if(_threadNum > 1)
+ if(threadNum > 1)
{
_multipleThreads = true;
}
@@ -145,7 +122,7 @@ IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, bool server) :
__setNoDelete(true);
try
{
- for(int i = 0 ; i < _threadNum ; ++i)
+ for(int i = 0 ; i < threadNum ; ++i)
{
IceUtil::ThreadPtr thread = new EventHandlerThread(this);
_threads.push_back(thread->start());
@@ -181,7 +158,7 @@ IceInternal::ThreadPool::~ThreadPool()
void
IceInternal::ThreadPool::destroy()
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ IceUtil::Mutex::Lock sync(*this);
assert(!_destroyed);
_destroyed = true;
setInterrupt(0);
@@ -259,33 +236,16 @@ void
IceInternal::ThreadPool::run()
{
ThreadPoolPtr self = this;
- bool shutdown = false;
while(true)
{
if(_multipleThreads)
{
- _threadMutex.lock();
+ _threadMutex.lock();
}
repeatSelect:
- //
- // We must shut down the object adapter factory. We cannot do
- // this in initiateShutdown(), because this method must be
- // signal safe. We also cannot do this within the
- // synchronization of this object, so we do it here.
- //
- if(shutdown)
- {
- shutdown = false;
- ObjectAdapterFactoryPtr factory = _instance->objectAdapterFactory();
- if(factory)
- {
- factory->shutdown();
- }
- }
-
fd_set fdSet;
memcpy(&fdSet, &_fdSet, sizeof(fd_set));
int ret;
@@ -301,11 +261,11 @@ IceInternal::ThreadPool::run()
ret = ::select(_maxFd + 1, &fdSet, 0, 0, 0);
}
- if(ret == 0) // Timeout.
+ if(ret == 0) // We initiate a shutdown if there is a thread pool timeout.
{
assert(_timeout);
_timeout = 0;
- shutdown = true;
+ initiateShutdown();
goto repeatSelect;
}
@@ -323,9 +283,10 @@ IceInternal::ThreadPool::run()
EventHandlerPtr handler;
bool finished = false;
+ bool shutdown = false;
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
+ IceUtil::Mutex::Lock sync(*this);
if(FD_ISSET(_fdIntrRead, &fdSet))
{
@@ -353,48 +314,43 @@ IceInternal::ThreadPool::run()
shutdown = clearInterrupt();
- //
- // Server shutdown?
- //
- if(shutdown)
- {
- goto repeatSelect;
- }
-
- //
- // An event handler must have been registered or
- // unregistered.
- //
- assert(!_changes.empty());
- pair<SOCKET, EventHandlerPtr> change = _changes.front();
- _changes.pop_front();
-
- if(change.second) // Addition if handler is set.
+ if(!shutdown)
{
- _handlerMap.insert(change);
- FD_SET(change.first, &_fdSet);
- _maxFd = max(_maxFd, change.first);
- _minFd = min(_minFd, change.first);
- goto repeatSelect;
- }
- else // Removal if handler is not set.
- {
- map<SOCKET, EventHandlerPtr>::iterator p = _handlerMap.find(change.first);
- assert(p != _handlerMap.end());
- handler = p->second;
- finished = true;
- _handlerMap.erase(p);
- FD_CLR(change.first, &_fdSet);
- _maxFd = _fdIntrRead;
- _minFd = _fdIntrRead;
- if(!_handlerMap.empty())
+ //
+ // An event handler must have been registered or
+ // unregistered.
+ //
+ assert(!_changes.empty());
+ pair<SOCKET, EventHandlerPtr> change = _changes.front();
+ _changes.pop_front();
+
+ if(change.second) // Addition if handler is set.
+ {
+ _handlerMap.insert(change);
+ FD_SET(change.first, &_fdSet);
+ _maxFd = max(_maxFd, change.first);
+ _minFd = min(_minFd, change.first);
+ goto repeatSelect;
+ }
+ else // Removal if handler is not set.
{
- _maxFd = max(_maxFd, (--_handlerMap.end())->first);
- _minFd = min(_minFd, _handlerMap.begin()->first);
+ map<SOCKET, EventHandlerPtr>::iterator p = _handlerMap.find(change.first);
+ assert(p != _handlerMap.end());
+ handler = p->second;
+ finished = true;
+ _handlerMap.erase(p);
+ FD_CLR(change.first, &_fdSet);
+ _maxFd = _fdIntrRead;
+ _minFd = _fdIntrRead;
+ if(!_handlerMap.empty())
+ {
+ _maxFd = max(_maxFd, (--_handlerMap.end())->first);
+ _minFd = min(_minFd, _handlerMap.begin()->first);
+ }
+ // Don't goto repeatSelect; we have to call
+ // finished() on the event handler below, outside
+ // the thread synchronization.
}
- // Don't goto repeatSelect; we have to call
- // finished() on the event handler below, outside
- // the thread synchronization.
}
}
else
@@ -481,60 +437,73 @@ IceInternal::ThreadPool::run()
}
}
- assert(handler);
+ assert(handler || shutdown);
- if(finished)
+ if(shutdown)
{
//
- // Notify a handler about it's removal from the thread
- // pool.
+ // Initiate server shutdown.
//
- try
- {
- handler->finished(self); // "self" is faster than "this", as the reference count is not modified.
- }
- catch(const LocalException& ex)
- {
- Error out(_instance->logger());
- out << "exception while calling finished():\n" << ex << '\n' << handler->toString();
- }
-
+ ObjectAdapterFactoryPtr factory = _instance->objectAdapterFactory();
+ if(factory)
{
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this);
- assert(_handlers > 0);
- if(--_handlers == 0)
- {
- notifyAll(); // For waitUntilFinished().
- }
+ promoteFollower();
+ factory->shutdown();
}
}
else
{
- //
- // If the handler is "readable", try to read a message.
- //
- BasicStream stream(_instance);
- if(handler->readable())
+ assert(handler);
+
+ if(finished)
{
+ //
+ // Notify a handler about it's removal from the thread
+ // pool.
+ //
try
{
- read(handler);
- }
- catch(const TimeoutException&) // Expected.
- {
- goto repeatSelect;
+ handler->finished(self); // "self" is faster than "this", as the reference count is not modified.
}
catch(const LocalException& ex)
{
- handler->exception(ex);
- goto repeatSelect;
+ Error out(_instance->logger());
+ out << "exception while calling finished():\n" << ex << '\n' << handler->toString();
}
-
- stream.swap(handler->_stream);
- assert(stream.i == stream.b.end());
}
+ else
+ {
+ //
+ // If the handler is "readable", try to read a
+ // message.
+ //
+ BasicStream stream(_instance);
+ if(handler->readable())
+ {
+ try
+ {
+ read(handler);
+ }
+ catch(const TimeoutException&) // Expected.
+ {
+ goto repeatSelect;
+ }
+ catch(const LocalException& ex)
+ {
+ handler->exception(ex);
+ goto repeatSelect;
+ }
+
+ stream.swap(handler->_stream);
+ assert(stream.i == stream.b.end());
+ }
- handler->message(stream, self); // "self" is faster than "this", as the reference count is not modified.
+ //
+ // "self" is faster than "this", as the reference
+ // count is not modified.
+ //
+ handler->message(stream, self);
+ }
}
}
}
@@ -619,25 +588,6 @@ IceInternal::ThreadPool::EventHandlerThread::run()
out << "unknown exception in thread pool";
}
- {
- IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*_pool.get());
- --_pool->_threadNum;
- assert(_pool->_threadNum >= 0);
-
- //
- // The notifyAll() shouldn't be needed, *except* if one of the
- // threads exits because of an exception. (Which is an error
- // condition in Ice and if it happens needs to be debugged.)
- // However, I call notifyAll() anyway, in all cases, using a
- // "defensive" programming approach when it comes to
- // multithreading.
- //
- if(_pool->_threadNum == 0)
- {
- _pool->notifyAll(); // For waitUntil...Finished() methods.
- }
- }
-
_pool->promoteFollower();
_pool = 0; // Break cyclic dependency.
}
diff --git a/cpp/src/Ice/ThreadPool.h b/cpp/src/Ice/ThreadPool.h
index 133d6b16696..9860d06ffc7 100644
--- a/cpp/src/Ice/ThreadPool.h
+++ b/cpp/src/Ice/ThreadPool.h
@@ -17,7 +17,6 @@
#include <IceUtil/Shared.h>
#include <IceUtil/Mutex.h>
-#include <IceUtil/Monitor.h>
#include <IceUtil/Thread.h>
#include <Ice/ThreadPoolF.h>
@@ -36,7 +35,7 @@ namespace IceInternal
class BasicStream;
-class ThreadPool : public ::IceUtil::Shared, public IceUtil::Monitor<IceUtil::Mutex>
+class ThreadPool : public ::IceUtil::Shared, public IceUtil::Mutex
{
public:
@@ -44,7 +43,6 @@ public:
void unregister(SOCKET);
void promoteFollower();
void initiateShutdown(); // Signal-safe shutdown initiation.
- void waitUntilFinished();
void joinWithAllThreads();
private:
@@ -70,7 +68,6 @@ private:
fd_set _fdSet;
std::list<std::pair<SOCKET, EventHandlerPtr> > _changes; // Event handler set for addition; null for removal.
std::map<SOCKET, EventHandlerPtr> _handlerMap;
- int _handlers;
int _timeout;
::IceUtil::Mutex _threadMutex;
bool _multipleThreads;
@@ -89,7 +86,6 @@ private:
friend class EventHandlerThread;
std::vector<IceUtil::ThreadControl> _threads; // Control for all threads, running or not.
- int _threadNum; // Number of running threads.
};
}
diff --git a/cpp/src/Ice/TraceUtil.cpp b/cpp/src/Ice/TraceUtil.cpp
index cf01b7390d6..fb1f148737b 100644
--- a/cpp/src/Ice/TraceUtil.cpp
+++ b/cpp/src/Ice/TraceUtil.cpp
@@ -217,10 +217,13 @@ IceInternal::traceBatchRequest(const char* heading, const BasicStream& str, cons
s << heading;
printHeader(s, stream);
- int cnt = 0;
- while(stream.i != stream.b.end())
+ Int batchRequestNum;
+ stream.read(batchRequestNum);
+ s << "\nnumber of requests = " << batchRequestNum;
+
+ while(batchRequestNum)
{
- s << "\nrequest #" << cnt++ << ':';
+ s << "\nrequest #" << batchRequestNum-- << ':';
printRequestHeader(s, stream);
stream.skipEncaps();
}