diff options
author | Benoit Foucher <benoit@zeroc.com> | 2014-06-27 10:31:41 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2014-06-27 10:31:41 +0200 |
commit | a4f93259dc3494d98addf38e69b87eb557d432b3 (patch) | |
tree | d2b78bb5cea24e33dc1b46be22dba6167e96c9ed /cpp/src/Ice/Direct.cpp | |
parent | Fix for ICE-5515 (ice_staticId on proxies) in Java, C#, Python, Ruby and PHP ... (diff) | |
download | ice-a4f93259dc3494d98addf38e69b87eb557d432b3.tar.bz2 ice-a4f93259dc3494d98addf38e69b87eb557d432b3.tar.xz ice-a4f93259dc3494d98addf38e69b87eb557d432b3.zip |
Better collocation optimization, fix for ICE-5489, ICE-5484
Diffstat (limited to 'cpp/src/Ice/Direct.cpp')
-rw-r--r-- | cpp/src/Ice/Direct.cpp | 148 |
1 files changed, 0 insertions, 148 deletions
diff --git a/cpp/src/Ice/Direct.cpp b/cpp/src/Ice/Direct.cpp deleted file mode 100644 index 3f3be1c14fb..00000000000 --- a/cpp/src/Ice/Direct.cpp +++ /dev/null @@ -1,148 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved. -// -// This copy of Ice is licensed to you under the terms described in the -// ICE_LICENSE file included in this distribution. -// -// ********************************************************************** - -#include <Ice/Direct.h> -#include <Ice/ObjectAdapterI.h> // For inc/decDirectCount(). -#include <Ice/ServantManager.h> -#include <Ice/ServantLocator.h> -#include <Ice/Reference.h> -#include <Ice/Object.h> -#include <Ice/LocalException.h> - -using namespace std; -using namespace Ice; -using namespace IceInternal; - -IceInternal::Direct::Direct(const Current& current) : - _current(current) -{ - ObjectAdapterI* adapter = dynamic_cast<ObjectAdapterI*>(_current.adapter.get()); - assert(adapter); - - // - // Must call incDirectCount() first, because it checks for adapter - // deactivation, and prevents deactivation completion until - // decDirectCount() is called. This is important, because - // getServantManager() may not be called afer deactivation - // completion. - // - adapter->incDirectCount(); - - ServantManagerPtr servantManager = adapter->getServantManager(); - assert(servantManager); - - _servant = servantManager->findServant(_current.id, _current.facet); - if(!_servant) - { - _locator = servantManager->findServantLocator(_current.id.category); - if(!_locator && !_current.id.category.empty()) - { - _locator = servantManager->findServantLocator(""); - } - if(_locator) - { - try - { - _servant = _locator->locate(_current, _cookie); - } - catch(...) - { - adapter->decDirectCount(); - throw; - } - } - } - - if(!_servant) - { - adapter->decDirectCount(); - if(servantManager && servantManager->hasServant(_current.id)) - { - FacetNotExistException ex(__FILE__, __LINE__); - ex.id = _current.id; - ex.facet = _current.facet; - ex.operation = _current.operation; - throw ex; - } - else - { - ObjectNotExistException ex(__FILE__, __LINE__); - ex.id = _current.id; - ex.facet = _current.facet; - ex.operation = _current.operation; - throw ex; - } - } -} - -bool -IceInternal::Direct::isCollocated() -{ - return true; -} - -const Current& -IceInternal::Direct::getCurrent() -{ - return _current; -} - -void -IceInternal::Direct::throwUserException() -{ - if(_userException.get() == 0) - { - assert(0); // should never happen - throw Ice::UnknownUserException(__FILE__, __LINE__); - } - _userException->ice_throw(); -} - -void -IceInternal::Direct::setUserException(const Ice::UserException& ue) -{ - _userException.reset(ue.ice_clone()); -} - -void -IceInternal::Direct::destroy() -{ - // - // NOTE: we can't do the following in the destructor because it - // might throw. - // - - ObjectAdapterI* adapter = dynamic_cast<ObjectAdapterI*>(_current.adapter.get()); - assert(adapter); - - if(_locator && _servant) - { - try - { - _locator->finished(_current, _servant, _cookie); - } - catch(...) - { - adapter->decDirectCount(); - throw; - } - } - - adapter->decDirectCount(); - if(_userException.get()) - { - _userException->ice_throw(); - } -} - -const ObjectPtr& -IceInternal::Direct::getServant() -{ - return _servant; -} |