Exemple #1
0
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());
    }
}
Exemple #2
0
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;
    }