diff options
author | Marc Laukien <marc@zeroc.com> | 2002-09-29 17:08:25 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2002-09-29 17:08:25 +0000 |
commit | 7459a281dc81f573246d99b0f863ef0065e4e6ad (patch) | |
tree | 2c14f30e3e3c8f40efa795631427a6a795b34d65 /cpp/src/Ice/Direct.cpp | |
parent | minor changes for gcc 3.2 (diff) | |
download | ice-7459a281dc81f573246d99b0f863ef0065e4e6ad.tar.bz2 ice-7459a281dc81f573246d99b0f863ef0065e4e6ad.tar.xz ice-7459a281dc81f573246d99b0f863ef0065e4e6ad.zip |
lots and lots of fixes
Diffstat (limited to 'cpp/src/Ice/Direct.cpp')
-rw-r--r-- | cpp/src/Ice/Direct.cpp | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/cpp/src/Ice/Direct.cpp b/cpp/src/Ice/Direct.cpp index b65596c6dcd..dcaf4cb6f28 100644 --- a/cpp/src/Ice/Direct.cpp +++ b/cpp/src/Ice/Direct.cpp @@ -9,7 +9,7 @@ // ********************************************************************** #include <Ice/Direct.h> -#include <Ice/ObjectAdapter.h> +#include <Ice/ObjectAdapterI.h> // We need ObjectAdapterI, not ObjectAdapter, because of inc/decUsageCount(). #include <Ice/ServantLocator.h> #include <Ice/Reference.h> #include <Ice/Object.h> @@ -24,11 +24,13 @@ IceInternal::Direct::Direct(const Current& current) : { try { - _servant = current.adapter->identityToServant(_current.id); + dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->incUsageCount(); + + _servant = _current.adapter->identityToServant(_current.id); if(!_servant && !_current.id.category.empty()) { - _locator = current.adapter->findServantLocator(_current.id.category); + _locator = _current.adapter->findServantLocator(_current.id.category); if(_locator) { _servant = _locator->locate(_current, _cookie); @@ -37,14 +39,21 @@ IceInternal::Direct::Direct(const Current& current) : if(!_servant) { - _locator = current.adapter->findServantLocator(""); + _locator = _current.adapter->findServantLocator(""); if(_locator) { _servant = _locator->locate(_current, _cookie); } } - if(_servant && !_current.facet.empty()) + if(!_servant) + { + ObjectNotExistException ex(__FILE__, __LINE__); + ex.id = _current.id; + throw ex; + } + + if(!_current.facet.empty()) { _facetServant = _servant->ice_findFacetPath(_current.facet, 0); if(!_facetServant) @@ -59,16 +68,19 @@ IceInternal::Direct::Direct(const Current& current) : { if(_locator && _servant) { - _locator->finished(_current, _servant, _cookie); + try + { + _locator->finished(_current, _servant, _cookie); + } + catch(...) + { + dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount(); + throw; + } } - throw; - } - if(!_servant) - { - ObjectNotExistException ex(__FILE__, __LINE__); - ex.id = _current.id; - throw ex; + dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount(); + throw; } } @@ -76,8 +88,18 @@ IceInternal::Direct::~Direct() { if(_locator && _servant) { - _locator->finished(_current, _servant, _cookie); + try + { + _locator->finished(_current, _servant, _cookie); + } + catch(...) + { + dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount(); + throw; + } } + + dynamic_cast<ObjectAdapterI*>(_current.adapter.get())->decUsageCount(); } const ObjectPtr& |