From a4f93259dc3494d98addf38e69b87eb557d432b3 Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Fri, 27 Jun 2014 10:31:41 +0200 Subject: Better collocation optimization, fix for ICE-5489, ICE-5484 --- cpp/src/Ice/Direct.cpp | 148 ------------------------------------------------- 1 file changed, 148 deletions(-) delete mode 100644 cpp/src/Ice/Direct.cpp (limited to 'cpp/src/Ice/Direct.cpp') 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 -#include // For inc/decDirectCount(). -#include -#include -#include -#include -#include - -using namespace std; -using namespace Ice; -using namespace IceInternal; - -IceInternal::Direct::Direct(const Current& current) : - _current(current) -{ - ObjectAdapterI* adapter = dynamic_cast(_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(_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; -} -- cgit v1.2.3