diff options
author | Matthew Newhook <matthew@zeroc.com> | 2007-09-04 17:27:59 +0800 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2007-09-04 17:27:59 +0800 |
commit | 612f04376ea27756c44a058f9512aaf2a3c095b9 (patch) | |
tree | 403163cec5182251a080f9a795d4c73d4f2f1e9d /cpp | |
parent | fix bug with test/Slice/keyword/run.py (diff) | |
download | ice-612f04376ea27756c44a058f9512aaf2a3c095b9.tar.bz2 ice-612f04376ea27756c44a058f9512aaf2a3c095b9.tar.xz ice-612f04376ea27756c44a058f9512aaf2a3c095b9.zip |
http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=2451
Squashed commit of the following:
commit f4ba9698ababcd06659be2c941fb1809833764ee
Author: Matthew Newhook <matthew@zeroc.com>
Date: Tue Sep 4 17:25:35 2007 +0800
some cleanup.
commit 58dae2c8e42132d645e8cbfce7ac6856995d3241
Author: Matthew Newhook <matthew@zeroc.com>
Date: Tue Sep 4 17:20:22 2007 +0800
added more dire warning comments.
commit c95d285943268c3623d61ccae8cc4d4654cf8056
Author: Matthew Newhook <matthew@zeroc.com>
Date: Tue Sep 4 17:09:32 2007 +0800
remove debug. added comment.
commit 8eed648a285edcf6b256ca9195021e36e437ac36
Author: Matthew Newhook <matthew@zeroc.com>
Date: Tue Sep 4 17:04:12 2007 +0800
Copy the connection to prevent the transaction from accessing itself after its been blown away.
commit 08523da6819abf029f67178a51c09b39e41168ca
Author: Matthew Newhook <matthew@zeroc.com>
Date: Tue Sep 4 16:25:40 2007 +0800
first set of fixes for the reference counting.
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/doc/slicefiles | 132 | ||||
-rw-r--r-- | cpp/src/Freeze/.depend | 2 | ||||
-rw-r--r-- | cpp/src/Freeze/ConnectionI.cpp | 19 | ||||
-rw-r--r-- | cpp/src/Freeze/ConnectionI.h | 17 | ||||
-rw-r--r-- | cpp/src/Freeze/MapI.cpp | 1 | ||||
-rw-r--r-- | cpp/src/Freeze/SharedDbEnv.cpp | 16 | ||||
-rw-r--r-- | cpp/src/Freeze/TransactionI.cpp | 103 | ||||
-rw-r--r-- | cpp/src/Freeze/TransactionI.h | 19 | ||||
-rw-r--r-- | cpp/src/Freeze/TransactionalEvictorContext.cpp | 2 |
9 files changed, 144 insertions, 167 deletions
diff --git a/cpp/doc/slicefiles b/cpp/doc/slicefiles index a82a6364118..43c995e5e8d 100644 --- a/cpp/doc/slicefiles +++ b/cpp/doc/slicefiles @@ -1,66 +1,66 @@ -SLICEFILES = ..\slice/Freeze/BackgroundSaveEvictor.ice \ - ..\slice/Freeze/CatalogData.ice \ - ..\slice/Freeze/Connection.ice \ - ..\slice/Freeze/ConnectionF.ice \ - ..\slice/Freeze/DB.ice \ - ..\slice/Freeze/Evictor.ice \ - ..\slice/Freeze/EvictorF.ice \ - ..\slice/Freeze/EvictorStorage.ice \ - ..\slice/Freeze/Exception.ice \ - ..\slice/Freeze/Transaction.ice \ - ..\slice/Freeze/TransactionalEvictor.ice \ - ..\slice/Glacier2/PermissionsVerifier.ice \ - ..\slice/Glacier2/PermissionsVerifierF.ice \ - ..\slice/Glacier2/Router.ice \ - ..\slice/Glacier2/RouterF.ice \ - ..\slice/Glacier2/Session.ice \ - ..\slice/Glacier2/SessionF.ice \ - ..\slice/Glacier2/SSLInfo.ice \ - ..\slice/Ice/BuiltinSequences.ice \ - ..\slice/Ice/Communicator.ice \ - ..\slice/Ice/CommunicatorF.ice \ - ..\slice/Ice/Connection.ice \ - ..\slice/Ice/ConnectionF.ice \ - ..\slice/Ice/Current.ice \ - ..\slice/Ice/Endpoint.ice \ - ..\slice/Ice/FacetMap.ice \ - ..\slice/Ice/Identity.ice \ - ..\slice/Ice/ImplicitContext.ice \ - ..\slice/Ice/ImplicitContextF.ice \ - ..\slice/Ice/LocalException.ice \ - ..\slice/Ice/Locator.ice \ - ..\slice/Ice/LocatorF.ice \ - ..\slice/Ice/Logger.ice \ - ..\slice/Ice/LoggerF.ice \ - ..\slice/Ice/ObjectAdapter.ice \ - ..\slice/Ice/ObjectAdapterF.ice \ - ..\slice/Ice/ObjectFactory.ice \ - ..\slice/Ice/ObjectFactoryF.ice \ - ..\slice/Ice/Plugin.ice \ - ..\slice/Ice/PluginF.ice \ - ..\slice/Ice/Process.ice \ - ..\slice/Ice/ProcessF.ice \ - ..\slice/Ice/Properties.ice \ - ..\slice/Ice/PropertiesF.ice \ - ..\slice/Ice/Router.ice \ - ..\slice/Ice/RouterF.ice \ - ..\slice/Ice/ServantLocator.ice \ - ..\slice/Ice/ServantLocatorF.ice \ - ..\slice/Ice/SliceChecksumDict.ice \ - ..\slice/Ice/Stats.ice \ - ..\slice/Ice/StatsF.ice \ - ..\slice/IceBox/IceBox.ice \ - ..\slice/IceGrid/Admin.ice \ - ..\slice/IceGrid/Descriptor.ice \ - ..\slice/IceGrid/Exception.ice \ - ..\slice/IceGrid/FileParser.ice \ - ..\slice/IceGrid/Locator.ice \ - ..\slice/IceGrid/Observer.ice \ - ..\slice/IceGrid/Query.ice \ - ..\slice/IceGrid/Registry.ice \ - ..\slice/IceGrid/Session.ice \ - ..\slice/IceGrid/UserAccountMapper.ice \ - ..\slice/IcePatch2/FileInfo.ice \ - ..\slice/IcePatch2/FileServer.ice \ - ..\slice/IceStorm/IceStorm.ice - +SLICEFILES = ..\slice\Freeze\BackgroundSaveEvictor.ice \
+ ..\slice\Freeze\CatalogData.ice \
+ ..\slice\Freeze\Connection.ice \
+ ..\slice\Freeze\ConnectionF.ice \
+ ..\slice\Freeze\DB.ice \
+ ..\slice\Freeze\Evictor.ice \
+ ..\slice\Freeze\EvictorF.ice \
+ ..\slice\Freeze\EvictorStorage.ice \
+ ..\slice\Freeze\Exception.ice \
+ ..\slice\Freeze\Transaction.ice \
+ ..\slice\Freeze\TransactionalEvictor.ice \
+ ..\slice\Glacier2\PermissionsVerifier.ice \
+ ..\slice\Glacier2\PermissionsVerifierF.ice \
+ ..\slice\Glacier2\Router.ice \
+ ..\slice\Glacier2\RouterF.ice \
+ ..\slice\Glacier2\Session.ice \
+ ..\slice\Glacier2\SessionF.ice \
+ ..\slice\Glacier2\SSLInfo.ice \
+ ..\slice\Ice\BuiltinSequences.ice \
+ ..\slice\Ice\Communicator.ice \
+ ..\slice\Ice\CommunicatorF.ice \
+ ..\slice\Ice\Connection.ice \
+ ..\slice\Ice\ConnectionF.ice \
+ ..\slice\Ice\Current.ice \
+ ..\slice\Ice\Endpoint.ice \
+ ..\slice\Ice\FacetMap.ice \
+ ..\slice\Ice\Identity.ice \
+ ..\slice\Ice\ImplicitContext.ice \
+ ..\slice\Ice\ImplicitContextF.ice \
+ ..\slice\Ice\LocalException.ice \
+ ..\slice\Ice\Locator.ice \
+ ..\slice\Ice\LocatorF.ice \
+ ..\slice\Ice\Logger.ice \
+ ..\slice\Ice\LoggerF.ice \
+ ..\slice\Ice\ObjectAdapter.ice \
+ ..\slice\Ice\ObjectAdapterF.ice \
+ ..\slice\Ice\ObjectFactory.ice \
+ ..\slice\Ice\ObjectFactoryF.ice \
+ ..\slice\Ice\Plugin.ice \
+ ..\slice\Ice\PluginF.ice \
+ ..\slice\Ice\Process.ice \
+ ..\slice\Ice\ProcessF.ice \
+ ..\slice\Ice\Properties.ice \
+ ..\slice\Ice\PropertiesF.ice \
+ ..\slice\Ice\Router.ice \
+ ..\slice\Ice\RouterF.ice \
+ ..\slice\Ice\ServantLocator.ice \
+ ..\slice\Ice\ServantLocatorF.ice \
+ ..\slice\Ice\SliceChecksumDict.ice \
+ ..\slice\Ice\Stats.ice \
+ ..\slice\Ice\StatsF.ice \
+ ..\slice\IceBox\IceBox.ice \
+ ..\slice\IceGrid\Admin.ice \
+ ..\slice\IceGrid\Descriptor.ice \
+ ..\slice\IceGrid\Exception.ice \
+ ..\slice\IceGrid\FileParser.ice \
+ ..\slice\IceGrid\Locator.ice \
+ ..\slice\IceGrid\Observer.ice \
+ ..\slice\IceGrid\Query.ice \
+ ..\slice\IceGrid\Registry.ice \
+ ..\slice\IceGrid\Session.ice \
+ ..\slice\IceGrid\UserAccountMapper.ice \
+ ..\slice\IcePatch2\FileInfo.ice \
+ ..\slice\IcePatch2\FileServer.ice \
+ ..\slice\IceStorm\IceStorm.ice
+
diff --git a/cpp/src/Freeze/.depend b/cpp/src/Freeze/.depend index fd911adbba8..cedf40c7b9c 100644 --- a/cpp/src/Freeze/.depend +++ b/cpp/src/Freeze/.depend @@ -21,7 +21,7 @@ TransactionalEvictor$(OBJEXT): TransactionalEvictor.cpp ../../include/Freeze/Tra TransactionalEvictorI$(OBJEXT): TransactionalEvictorI.cpp ../Freeze/TransactionalEvictorI.h ../Freeze/EvictorI.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/Config.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/Functional.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Options.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Shared.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StaticMutex.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/IceUtil/Unicode.h ../../include/IceUtil/Timer.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../../include/Freeze/Freeze.h ../../include/Freeze/Initialize.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../../include/Freeze/Transaction.h ../../include/Freeze/BackgroundSaveEvictor.h ../../include/Freeze/Evictor.h ../../include/Freeze/Exception.h ../../include/Freeze/TransactionalEvictor.h ../../include/Freeze/Map.h ../../include/Freeze/Connection.h ../../include/Freeze/TransactionHolder.h ../Freeze/ObjectStore.h ../../include/Freeze/EvictorStorage.h ../Freeze/TransactionI.h ../Freeze/EvictorIteratorI.h ../Freeze/SharedDbEnv.h ../../include/IceUtil/DisableWarnings.h ../Freeze/Util.h ../Freeze/TransactionalEvictorContext.h TransactionalEvictorContext$(OBJEXT): TransactionalEvictorContext.cpp ../Freeze/TransactionalEvictorContext.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.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/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../../include/Freeze/TransactionalEvictor.h ../../include/Freeze/Evictor.h ../../include/Freeze/Exception.h ../../include/Freeze/EvictorStorage.h ../Freeze/EvictorI.h ../../include/IceUtil/IceUtil.h ../../include/IceUtil/AbstractMutex.h ../../include/IceUtil/Algorithm.h ../../include/IceUtil/ArgVector.h ../../include/IceUtil/Base64.h ../../include/IceUtil/Cache.h ../../include/IceUtil/CountDownLatch.h ../../include/IceUtil/CtrlCHandler.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/MD5.h ../../include/IceUtil/Options.h ../../include/IceUtil/OutputUtil.h ../../include/IceUtil/RWRecMutex.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Random.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/UUID.h ../../include/IceUtil/Timer.h ../../include/Freeze/Freeze.h ../../include/Freeze/Initialize.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../../include/Freeze/Transaction.h ../../include/Freeze/BackgroundSaveEvictor.h ../../include/Freeze/Map.h ../../include/Freeze/Connection.h ../../include/Freeze/TransactionHolder.h ../Freeze/ObjectStore.h ../Freeze/TransactionI.h ../Freeze/EvictorIteratorI.h ../Freeze/SharedDbEnv.h ../../include/IceUtil/DisableWarnings.h ../Freeze/TransactionalEvictorI.h ../Freeze/Util.h ../Freeze/ConnectionI.h TransactionHolder$(OBJEXT): TransactionHolder.cpp ../../include/Freeze/TransactionHolder.h ../../include/Freeze/Connection.h ../../include/Ice/LocalObjectF.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/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Freeze/Transaction.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/CommunicatorF.h -TransactionI$(OBJEXT): TransactionI.cpp ../Freeze/TransactionI.h ../../include/Freeze/Transaction.h ../../include/Ice/LocalObjectF.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/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../Freeze/ConnectionI.h ../../include/Freeze/Connection.h ../../include/Ice/CommunicatorF.h ../../include/Freeze/Initialize.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../Freeze/SharedDbEnv.h ../../include/Freeze/Exception.h +TransactionI$(OBJEXT): TransactionI.cpp ../Freeze/TransactionI.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.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/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Freeze/Transaction.h ../Freeze/ConnectionI.h ../../include/Freeze/Connection.h ../../include/Freeze/Initialize.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../Freeze/SharedDbEnv.h ../../include/Freeze/Exception.h Transaction$(OBJEXT): Transaction.cpp ../../include/Freeze/Transaction.h ../../include/Ice/LocalObjectF.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/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/IceUtil/Iterator.h ../../include/IceUtil/ScopedArray.h ../../include/IceUtil/DisableWarnings.h Util$(OBJEXT): Util.cpp ../Freeze/Util.h ../../include/Ice/Ice.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.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/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/GCShared.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ImplicitContextF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/OutgoingAsync.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantManagerF.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/Process.h ../../include/Ice/Outgoing.h ../../include/Ice/Direct.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Ice/ImplicitContext.h ../../include/Ice/Locator.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../../include/Ice/Router.h ../../include/Ice/DispatchInterceptor.h ../../include/Ice/IconvStringConverter.h ../../include/Freeze/DB.h ../../include/Freeze/Exception.h BackgroundSaveEvictor.cpp: ../../slice/Freeze/BackgroundSaveEvictor.ice ../../slice/Freeze/Evictor.ice ../../slice/Ice/ObjectAdapterF.ice ../../slice/Ice/ServantLocator.ice ../../slice/Ice/Current.ice ../../slice/Ice/ConnectionF.ice ../../slice/Ice/Identity.ice ../../slice/Freeze/Exception.ice diff --git a/cpp/src/Freeze/ConnectionI.cpp b/cpp/src/Freeze/ConnectionI.cpp index 1237a46c753..66a1e8ba0f7 100644 --- a/cpp/src/Freeze/ConnectionI.cpp +++ b/cpp/src/Freeze/ConnectionI.cpp @@ -15,7 +15,6 @@ using namespace Ice; using namespace Freeze; using namespace std; - Freeze::TransactionPtr Freeze::ConnectionI::beginTransaction() { @@ -25,13 +24,12 @@ Freeze::ConnectionI::beginTransaction() Freeze::TransactionIPtr Freeze::ConnectionI::beginTransactionI() { - if(_transaction != 0) + if(_transaction) { throw TransactionAlreadyInProgressException(__FILE__, __LINE__); } closeAllIterators(); _transaction = new TransactionI(this); - _transaction->internalIncRef(); return _transaction; } @@ -44,7 +42,7 @@ Freeze::ConnectionI::currentTransaction() const void Freeze::ConnectionI::close() { - if(_transaction != 0) + if(_transaction) { try { @@ -56,7 +54,7 @@ Freeze::ConnectionI::close() // Ignored // } - assert(_transaction == 0); + assert(!_transaction); } while(!_mapList.empty()) @@ -65,7 +63,6 @@ Freeze::ConnectionI::close() } _dbEnv = 0; - } CommunicatorPtr @@ -80,18 +77,15 @@ Freeze::ConnectionI::getName() const return _envName; } - Freeze::ConnectionI::~ConnectionI() { close(); } - Freeze::ConnectionI::ConnectionI(const SharedDbEnvPtr& dbEnv) : _communicator(dbEnv->getCommunicator()), _dbEnv(dbEnv), _envName(dbEnv->getEnvName()), - _transaction(0), _trace(_communicator->getProperties()->getPropertyAsInt("Freeze.Trace.Map")), _txTrace(_communicator->getProperties()->getPropertyAsInt("Freeze.Trace.Transaction")), _deadlockWarning(_communicator->getProperties()->getPropertyAsInt("Freeze.Warn.Deadlocks") != 0) @@ -121,17 +115,14 @@ Freeze::ConnectionI::unregisterMap(MapHelperI* m) } Freeze::ConnectionPtr -Freeze::createConnection(const CommunicatorPtr& communicator, - const string& envName) +Freeze::createConnection(const CommunicatorPtr& communicator, const string& envName) { return new ConnectionI(SharedDbEnv::get(communicator, envName, 0)); } Freeze::ConnectionPtr -Freeze::createConnection(const CommunicatorPtr& communicator, - const string& envName, - DbEnv& dbEnv) +Freeze::createConnection(const CommunicatorPtr& communicator, const string& envName, DbEnv& dbEnv) { return new ConnectionI(SharedDbEnv::get(communicator, envName, &dbEnv)); } diff --git a/cpp/src/Freeze/ConnectionI.h b/cpp/src/Freeze/ConnectionI.h index a9011da45e8..aa4fb822089 100644 --- a/cpp/src/Freeze/ConnectionI.h +++ b/cpp/src/Freeze/ConnectionI.h @@ -65,28 +65,27 @@ public: private: - Ice::CommunicatorPtr _communicator; + const Ice::CommunicatorPtr _communicator; SharedDbEnvPtr _dbEnv; - std::string _envName; - TransactionI* _transaction; + const std::string _envName; + TransactionIPtr _transaction; std::list<MapHelperI*> _mapList; - Ice::Int _trace; - Ice::Int _txTrace; - bool _deadlockWarning; + const Ice::Int _trace; + const Ice::Int _txTrace; + const bool _deadlockWarning; }; +typedef IceUtil::Handle<ConnectionI> ConnectionIPtr; inline void ConnectionI::clearTransaction() { - TransactionI* tx = _transaction; _transaction = 0; - tx->internalDecRef(); } inline DbTxn* ConnectionI::dbTxn() const { - if(_transaction == 0) + if(!_transaction) { return 0; } diff --git a/cpp/src/Freeze/MapI.cpp b/cpp/src/Freeze/MapI.cpp index a070bbd3c31..ee2b1de0e3a 100644 --- a/cpp/src/Freeze/MapI.cpp +++ b/cpp/src/Freeze/MapI.cpp @@ -1376,7 +1376,6 @@ callback(Db* secondary, const Dbt* key, const Dbt* value, Dbt* result) return index->secondaryKeyCreate(secondary, key, value, result); } - Freeze::MapIndexI::MapIndexI(const ConnectionIPtr& connection, SharedDb& db, DbTxn* txn, bool createDb, const MapIndexBasePtr& index) : _index(index) diff --git a/cpp/src/Freeze/SharedDbEnv.cpp b/cpp/src/Freeze/SharedDbEnv.cpp index 1c54afbce7c..39df230f32c 100644 --- a/cpp/src/Freeze/SharedDbEnv.cpp +++ b/cpp/src/Freeze/SharedDbEnv.cpp @@ -90,10 +90,8 @@ SharedDbEnvMap* sharedDbEnvMap; } - Freeze::SharedDbEnvPtr -Freeze::SharedDbEnv::get(const CommunicatorPtr& communicator, - const string& envName, DbEnv* env) +Freeze::SharedDbEnv::get(const CommunicatorPtr& communicator, const string& envName, DbEnv* env) { StaticMutex::Lock lock(_mapMutex); @@ -243,7 +241,6 @@ Freeze::SharedDbEnv::createCurrent() return ctx; } - Freeze::TransactionalEvictorContextPtr Freeze::SharedDbEnv::getCurrent() { @@ -275,19 +272,19 @@ Freeze::SharedDbEnv::setCurrentTransaction(const Freeze::TransactionPtr& tx) // // Verify it points to the good DbEnv // - if(txi->getConnectionI() == 0 || txi->getConnectionI()->dbEnv() == 0) + ConnectionIPtr conn = ConnectionIPtr::dynamicCast(tx->getConnection()); + if(!conn || conn->dbEnv() == 0) { throw DatabaseException(__FILE__, __LINE__, "invalid transaction"); } - if(txi->getConnectionI()->dbEnv().get() != this) + if(conn->dbEnv().get() != this) { throw DatabaseException(__FILE__, __LINE__, "the given transaction is bound to environment '" + - txi->getConnectionI()->dbEnv()->_envName + "'"); + conn->dbEnv()->_envName + "'"); } } - Freeze::TransactionalEvictorContextPtr ctx = getCurrent(); if(ctx != 0) @@ -457,8 +454,6 @@ Freeze::SharedDbEnv::SharedDbEnv(const std::string& envName, _catalog = SharedDb::openCatalog(*this); } - - Freeze::CheckpointThread::CheckpointThread(SharedDbEnv& dbEnv, const Time& checkpointPeriod, Int kbyte, Int trace) : _dbEnv(dbEnv), _done(false), @@ -481,7 +476,6 @@ Freeze::CheckpointThread::terminate() getThreadControl().join(); } - void Freeze::CheckpointThread::run() { diff --git a/cpp/src/Freeze/TransactionI.cpp b/cpp/src/Freeze/TransactionI.cpp index e5b28a79132..f7844748ed8 100644 --- a/cpp/src/Freeze/TransactionI.cpp +++ b/cpp/src/Freeze/TransactionI.cpp @@ -45,20 +45,21 @@ Freeze::TransactionI::commit() if(_txTrace >= 1) { - Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction"); + Trace out(_communicator->getLogger(), "Freeze.Transaction"); out << "committed transaction " << hex << txnId << dec; } } catch(const ::DbDeadlockException& dx) { - if(_txTrace >= 1) { - Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction"); + Trace out(_communicator->getLogger(), "Freeze.Transaction"); out << "failed to commit transaction " << hex << txnId << dec << ": " << dx.what(); } postCompletion(false, true); + // After postCompletion is called the transaction may be + // dead. Beware! DeadlockException ex(__FILE__, __LINE__); ex.message = dx.what(); throw ex; @@ -67,16 +68,20 @@ Freeze::TransactionI::commit() { if(_txTrace >= 1) { - Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction"); + Trace out(_communicator->getLogger(), "Freeze.Transaction"); out << "failed to commit transaction " << hex << txnId << dec << ": " << dx.what(); } postCompletion(false, false); + // After postCompletion is called the transaction may be + // dead. Beware! DatabaseException ex(__FILE__, __LINE__); ex.message = dx.what(); throw ex; } postCompletion(true, false); + // After postCompletion is called the transaction may be + // dead. Beware! } void @@ -98,7 +103,7 @@ Freeze::TransactionI::rollback() if(_txTrace >= 1) { - Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction"); + Trace out(_communicator->getLogger(), "Freeze.Transaction"); out << "rolled back transaction " << hex << txnId << dec; } } @@ -106,88 +111,70 @@ Freeze::TransactionI::rollback() { if(_txTrace >= 1) { - Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction"); + Trace out(_communicator->getLogger(), "Freeze.Transaction"); out << "failed to rollback transaction " << hex << txnId << dec << ": " << dx.what(); } postCompletion(false, true); + // After postCompletion is called the transaction may be + // dead. Beware! throw DeadlockException(__FILE__, __LINE__, dx.what()); } catch(const ::DbException& dx) { if(_txTrace >= 1) { - Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction"); + Trace out(_communicator->getLogger(), "Freeze.Transaction"); out << "failed to rollback transaction " << hex << txnId << dec << ": " << dx.what(); } postCompletion(false, false); + // After postCompletion is called the transaction may be + // dead. Beware! throw DatabaseException(__FILE__, __LINE__, dx.what()); } postCompletion(true, false); + // After postCompletion is called the transaction may be + // dead. Beware! } } Freeze::ConnectionPtr Freeze::TransactionI::getConnection() const { - if(_txn != 0) - { - return _connection; - } - else - { - return 0; - } + return _connection; } // // External refcount operations, from code holding a Transaction[I]Ptr // void -Freeze::TransactionI::__incRef() -{ - Shared::__incRef(); - if(_txn != 0) - { - _connection->__incRef(); - } -} - -void Freeze::TransactionI::__decRef() { - if(_txn != 0) + // If dropping the second to last reference and there is still a + // transaction then this means the last reference is held by the + // connection. In this case we must rollback the transaction. + bool rb = false; + if(__getRef() == 2 && _txn) { - _connection->__decRef(); + rb = true; } Shared::__decRef(); + if(rb) + { + rollback(); + // After this the transaction is dead. + } } -// -// The refcount on transaction held by the associated ConnectionI object -// -void -Freeze::TransactionI::internalIncRef() -{ - Shared::__incRef(); -} - -void -Freeze::TransactionI::internalDecRef() -{ - Shared::__incRef(); -} - - void Freeze::TransactionI::setPostCompletionCallback(const Freeze::PostCompletionCallbackPtr& cb) { _postCompletionCallback = cb; } - -Freeze::TransactionI::TransactionI(ConnectionI* connection) : +Freeze::TransactionI::TransactionI(const ConnectionIPtr& connection) : + _communicator(connection->communicator()), _connection(connection), _txTrace(connection->txTrace()), _txn(0) @@ -199,7 +186,7 @@ Freeze::TransactionI::TransactionI(ConnectionI* connection) : if(_txTrace >= 1) { long txnId = (_txn->id() & 0x7FFFFFFF) + 0x80000000L; - Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction"); + Trace out(_communicator->getLogger(), "Freeze.Transaction"); out << "started transaction " << hex << txnId << dec; } } @@ -207,7 +194,7 @@ Freeze::TransactionI::TransactionI(ConnectionI* connection) : { if(_txTrace >= 1) { - Trace out(_connection->communicator()->getLogger(), "Freeze.Transaction"); + Trace out(_communicator->getLogger(), "Freeze.Transaction"); out << "failed to start transaction: " << dx.what(); } @@ -228,7 +215,7 @@ Freeze::TransactionI::~TransactionI() } catch(const IceUtil::Exception& e) { - Error error(_connection->communicator()->getLogger()); + Error error(_communicator->getLogger()); error << "transaction rollback raised :" << e; } } @@ -237,6 +224,10 @@ Freeze::TransactionI::~TransactionI() void Freeze::TransactionI::postCompletion(bool committed, bool deadlock) { + // The order of assignment in this method is very important as + // calling both the post completion callback and + // Connection::clearTransaction may alter the transaction + // reference count which checks _txn. _txn = 0; if(_postCompletionCallback != 0) @@ -244,5 +235,19 @@ Freeze::TransactionI::postCompletion(bool committed, bool deadlock) _postCompletionCallback->postCompletion(committed, deadlock); } - _connection->clearTransaction(); // will release the internal refcount + // Its necessary here to copy the connection before calling + // clearTransaction because this may release the last reference. This specifically + // occurs in the following scenario: + // + // TransactionalEvictorContext holds the _tx. It calls + // _tx->commit(). This comes into this method, and calls + // _postCompletionCallback. This causes the context to drop the + // _tx reference (reference count is now 1). The + // connection->clearTransaction() is then called which drops its + // reference causing the transaction to be deleted. + // + ConnectionIPtr con = _connection; + _connection = 0; // Drop the connection + con->clearTransaction(); + // At this point the transaction may be dead. } diff --git a/cpp/src/Freeze/TransactionI.h b/cpp/src/Freeze/TransactionI.h index b8e5a9a582d..a44e782bbc0 100644 --- a/cpp/src/Freeze/TransactionI.h +++ b/cpp/src/Freeze/TransactionI.h @@ -10,6 +10,7 @@ #ifndef FREEZE_TRANSACTIONI_H #define FREEZE_TRANSACTIONI_H +#include <Ice/CommunicatorF.h> #include <Freeze/Transaction.h> #include <db_cxx.h> @@ -27,7 +28,6 @@ public: }; typedef IceUtil::Handle<PostCompletionCallback> PostCompletionCallbackPtr; - class TransactionI : public Transaction { public: @@ -41,12 +41,11 @@ public: // // Custom refcounting implementation // - virtual void __incRef(); virtual void __decRef(); void setPostCompletionCallback(const PostCompletionCallbackPtr&); - TransactionI(ConnectionI*); + TransactionI(const ConnectionIPtr&); ~TransactionI(); DbTxn* @@ -55,23 +54,15 @@ public: return _txn; } - const ConnectionI* - getConnectionI() const - { - return _connection; - } - private: friend class ConnectionI; - void internalIncRef(); - void internalDecRef(); - void postCompletion(bool, bool); - ConnectionI* const _connection; - Ice::Int _txTrace; + const Ice::CommunicatorPtr _communicator; + ConnectionIPtr _connection; + const Ice::Int _txTrace; DbTxn* _txn; PostCompletionCallbackPtr _postCompletionCallback; }; diff --git a/cpp/src/Freeze/TransactionalEvictorContext.cpp b/cpp/src/Freeze/TransactionalEvictorContext.cpp index ac9466d017e..9fe1cf11d3f 100644 --- a/cpp/src/Freeze/TransactionalEvictorContext.cpp +++ b/cpp/src/Freeze/TransactionalEvictorContext.cpp @@ -34,7 +34,6 @@ Freeze::TransactionalEvictorContext::TransactionalEvictorContext(const Transacti _tx->setPostCompletionCallback(this); } - Freeze::TransactionalEvictorContext::~TransactionalEvictorContext() { for_each(_invalidateList.begin(), _invalidateList.end(), ToInvalidate::destroy); @@ -58,7 +57,6 @@ Freeze::TransactionalEvictorContext::rollback() } } - void Freeze::TransactionalEvictorContext::postCompletion(bool committed, bool deadlock) { |