diff options
Diffstat (limited to 'src/corelib/thread/qfutureinterface.cpp')
-rw-r--r-- | src/corelib/thread/qfutureinterface.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/corelib/thread/qfutureinterface.cpp b/src/corelib/thread/qfutureinterface.cpp index 2a79a501e3..ee3d113196 100644 --- a/src/corelib/thread/qfutureinterface.cpp +++ b/src/corelib/thread/qfutureinterface.cpp @@ -57,6 +57,19 @@ enum { MaxProgressEmitsPerSecond = 25 }; +namespace { +class ThreadPoolThreadReleaser { + QThreadPool *m_pool; +public: + explicit ThreadPoolThreadReleaser(QThreadPool *pool) + : m_pool(pool) + { if (pool) pool->releaseThread(); } + ~ThreadPoolThreadReleaser() + { if (m_pool) m_pool->reserveThread(); } +}; +} // unnamed namespace + + QFutureInterfaceBase::QFutureInterfaceBase(State initialState) : d(new QFutureInterfaceBasePrivate(initialState)) { } @@ -182,11 +195,9 @@ void QFutureInterfaceBase::waitForResume() return; // decrease active thread count since this thread will wait. - QThreadPool::globalInstance()->releaseThread(); + const ThreadPoolThreadReleaser releaser(QThreadPool::globalInstance()); d->pausedWaitCondition.wait(&d->m_mutex); - - QThreadPool::globalInstance()->reserveThread(); } int QFutureInterfaceBase::progressValue() const |