void RpcServerImpl::onNoWaitingThreads(const NoWaitingThreadsEvent& /*event*/) { MutexLock lock(_threadMutex); if (_threads.size() >= maxThreads()) { log_warn("thread limit " << maxThreads() << " reached"); return; } try { Worker* worker = new Worker(*this); try { log_debug("create thread " << static_cast<void*>(worker) << "; running threads=" << _threads.size()); worker->start(); _threads.insert(worker); log_debug(_threads.size() << " threads running"); } catch (const std::exception&) { delete worker; throw; } } catch (const std::exception& e) { log_warn("failed to create thread: " << e.what()); } }
int ThreadPool::queueFullHandler () { // If we have no scavenger we cannot dynamically add threads. if (m_thrScavenger == 0) return 0; if (threadCount () < maxThreads ()) return threadAdd (); else return 0; }