summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ThreadPool.h
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2014-07-15 10:22:40 +0200
committerBenoit Foucher <benoit@zeroc.com>2014-07-15 10:22:40 +0200
commit710a9221852d6c92b1727a429a33b38f1f949352 (patch)
tree6bc9ac9ed04a6b1858d8fc30282d4f18ef04abbb /cpp/src/Ice/ThreadPool.h
parent- Fix for ICE-5578 - Python build failure (diff)
downloadice-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.h')
-rw-r--r--cpp/src/Ice/ThreadPool.h60
1 files changed, 38 insertions, 22 deletions
diff --git a/cpp/src/Ice/ThreadPool.h b/cpp/src/Ice/ThreadPool.h
index f4df601605c..d8e0b85dcd1 100644
--- a/cpp/src/Ice/ThreadPool.h
+++ b/cpp/src/Ice/ThreadPool.h
@@ -37,6 +37,35 @@ class ThreadPoolCurrent;
class ThreadPoolWorkQueue;
typedef IceUtil::Handle<ThreadPoolWorkQueue> ThreadPoolWorkQueuePtr;
+class ThreadPoolWorkItem : virtual public IceUtil::Shared
+{
+public:
+
+ virtual void execute(ThreadPoolCurrent&) = 0;
+};
+typedef IceUtil::Handle<ThreadPoolWorkItem> ThreadPoolWorkItemPtr;
+
+class DispatchWorkItem : public ThreadPoolWorkItem, public Ice::DispatcherCall
+{
+public:
+
+ DispatchWorkItem();
+ DispatchWorkItem(const Ice::ConnectionPtr& connection);
+
+ const Ice::ConnectionPtr&
+ getConnection()
+ {
+ return _connection;
+ }
+
+private:
+
+ virtual void execute(ThreadPoolCurrent&);
+
+ const Ice::ConnectionPtr _connection;
+};
+typedef IceUtil::Handle<DispatchWorkItem> DispatchWorkItemPtr;
+
class ThreadPool : public IceUtil::Shared, public IceUtil::Monitor<IceUtil::Mutex>
{
class EventHandlerThread : public IceUtil::Thread
@@ -77,7 +106,10 @@ public:
update(handler, status, SocketOperationNone);
}
void finish(const EventHandlerPtr&);
- void execute(const ThreadPoolWorkItemPtr&);
+
+ void dispatchFromThisThread(const DispatchWorkItemPtr&);
+ void dispatch(const DispatchWorkItemPtr&);
+
void joinWithAllThreads();
std::string prefix() const;
@@ -99,6 +131,7 @@ private:
std::string nextThreadId();
const InstancePtr _instance;
+ const Ice::DispatcherPtr _dispatcher;
ThreadPoolWorkQueuePtr _workQueue;
bool _destroyed;
const std::string _prefix;
@@ -157,7 +190,10 @@ public:
}
#endif
- InstancePtr getInstance();
+ void dispatchFromThisThread(const DispatchWorkItemPtr& workItem)
+ {
+ _threadPool->dispatchFromThisThread(workItem);
+ }
private:
@@ -172,26 +208,6 @@ private:
int _error;
#endif
friend class ThreadPool;
-};
-
-class ThreadPoolWorkItem : virtual public IceUtil::Shared
-{
-public:
-
- virtual void execute(ThreadPoolCurrent&) = 0;
-};
-
-class DispatchWorkItem : public ThreadPoolWorkItem, public Ice::DispatcherCall
-{
-public:
-
- DispatchWorkItem();
- DispatchWorkItem(const Ice::ConnectionPtr& connection);
-
- private:
-
- virtual void execute(ThreadPoolCurrent&);
- Ice::ConnectionPtr _connection;
};
class ThreadPoolWorkQueue : public EventHandler, public IceUtil::Mutex