• Martin Blix Grydeland's avatar
    Govern thread creation by queue length instead of dry signals · b3344f26
    Martin Blix Grydeland authored
    When getidleworker signals the pool herder to spawn a thread, it increases
    the dry counter, and the herder resets dry again when spawning a single
    thread. This will in many cases only create a single thread even though
    the herder was signaled dry multiple times, and may cause a situation
    where the cache acceptor is queued and no new thread is created. Together
    with long lasting tasks (ie endless pipelines), and all other tasks having
    higher priority, this will prevent the cache acceptor from being
    rescheduled.
    
    c00096.vtc demonstrates how this can lock up.
    
    To fix this, spawn threads if we have queued tasks and we are below the
    thread maximum level.
    
    Conflicts:
        bin/varnishd/cache/cache_wrk.c
    b3344f26
cache_pool.h 2.25 KB