diff options
author | Benoit Foucher <benoit@zeroc.com> | 2014-07-15 10:22:40 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2014-07-15 10:22:40 +0200 |
commit | 710a9221852d6c92b1727a429a33b38f1f949352 (patch) | |
tree | 6bc9ac9ed04a6b1858d8fc30282d4f18ef04abbb /cpp/src/Ice/ThreadPool.cpp | |
parent | - Fix for ICE-5578 - Python build failure (diff) | |
download | ice-710a9221852d6c92b1727a429a33b38f1f949352.tar.bz2 ice-710a9221852d6c92b1727a429a33b38f1f949352.tar.xz ice-710a9221852d6c92b1727a429a33b38f1f949352.zip |
Fixed collocation optimization to use the dispatcher, minor test fixes
Diffstat (limited to 'cpp/src/Ice/ThreadPool.cpp')
-rw-r--r-- | cpp/src/Ice/ThreadPool.cpp | 82 |
1 files changed, 40 insertions, 42 deletions
diff --git a/cpp/src/Ice/ThreadPool.cpp b/cpp/src/Ice/ThreadPool.cpp index d7c26aced63..593191c3034 100644 --- a/cpp/src/Ice/ThreadPool.cpp +++ b/cpp/src/Ice/ThreadPool.cpp @@ -37,7 +37,6 @@ using namespace Ice::Instrumentation; using namespace IceInternal; ICE_DECLSPEC_EXPORT IceUtil::Shared* IceInternal::upCast(ThreadPool* p) { return p; } -ICE_DECLSPEC_EXPORT IceUtil::Shared* IceInternal::upCast(ThreadPoolWorkItem* p) { return p; } namespace { @@ -141,47 +140,19 @@ class ThreadPoolDestroyedException } - -IceInternal::DispatchWorkItem::DispatchWorkItem() { +IceInternal::DispatchWorkItem::DispatchWorkItem() +{ } -IceInternal::DispatchWorkItem::DispatchWorkItem(const Ice::ConnectionPtr& connection) : _connection(connection) { - +IceInternal::DispatchWorkItem::DispatchWorkItem(const Ice::ConnectionPtr& connection) : _connection(connection) +{ } void IceInternal::DispatchWorkItem::execute(ThreadPoolCurrent& current) { - InstancePtr instance = current.getInstance(); - Ice::DispatcherPtr dispatcher = instance->initializationData().dispatcher; - if(dispatcher) - { - try - { - dispatcher->dispatch(this, _connection); - } - catch(const std::exception& ex) - { - if(instance->initializationData().properties->getPropertyAsIntWithDefault("Ice.Warn.Dispatch", 1) > 1) - { - Warning out(instance->initializationData().logger); - out << "dispatch exception:\n" << ex; - } - } - catch(...) - { - if(instance->initializationData().properties->getPropertyAsIntWithDefault("Ice.Warn.Dispatch", 1) > 1) - { - Warning out(instance->initializationData().logger); - out << "dispatch exception:\nunknown c++ exception"; - } - } - } - else - { - current.ioCompleted(); // Promote a follower. - run(); - } + current.ioCompleted(); // Promote follower + current.dispatchFromThisThread(this); } IceInternal::ThreadPoolWorkQueue::ThreadPoolWorkQueue(const InstancePtr& instance, Selector& selector) : @@ -393,6 +364,7 @@ IceInternal::ThreadPoolWorkQueue::postMessage() IceInternal::ThreadPool::ThreadPool(const InstancePtr& instance, const string& prefix, int timeout) : _instance(instance), + _dispatcher(_instance->initializationData().dispatcher), _destroyed(false), _prefix(prefix), _selector(instance), @@ -647,7 +619,39 @@ IceInternal::ThreadPool::finish(const EventHandlerPtr& handler) } void -IceInternal::ThreadPool::execute(const ThreadPoolWorkItemPtr& workItem) +IceInternal::ThreadPool::dispatchFromThisThread(const DispatchWorkItemPtr& workItem) +{ + if(_dispatcher) + { + try + { + _dispatcher->dispatch(workItem, workItem->getConnection()); + } + catch(const std::exception& ex) + { + if(_instance->initializationData().properties->getPropertyAsIntWithDefault("Ice.Warn.Dispatch", 1) > 1) + { + Warning out(_instance->initializationData().logger); + out << "dispatch exception:\n" << ex; + } + } + catch(...) + { + if(_instance->initializationData().properties->getPropertyAsIntWithDefault("Ice.Warn.Dispatch", 1) > 1) + { + Warning out(_instance->initializationData().logger); + out << "dispatch exception:\nunknown c++ exception"; + } + } + } + else + { + workItem->run(); + } +} + +void +IceInternal::ThreadPool::dispatch(const DispatchWorkItemPtr& workItem) { _workQueue->queue(workItem); } @@ -1358,9 +1362,3 @@ ThreadPoolCurrent::ThreadPoolCurrent(const InstancePtr& instance, #endif { } - -InstancePtr -ThreadPoolCurrent::getInstance() -{ - return stream.instance(); -} |