• Stefan Hajnoczi's avatar
    coroutine: add ./configure --disable-coroutine-pool · 70c60c08
    Stefan Hajnoczi authored
    The 'gthread' coroutine backend was written before the freelist (aka
    pool) existed in qemu-coroutine.c.
    
    This means that every thread is expected to exit when its coroutine
    terminates.  It is not possible to reuse threads from a pool.
    
    This patch automatically disables the pool when 'gthread' is used.  This
    allows the 'gthread' backend to work again (for example,
    tests/test-coroutine completes successfully instead of hanging).
    
    I considered implementing thread reuse but I don't want quirks like CPU
    affinity differences due to coroutine threads being recycled.  The
    'gthread' backend is a reference backend and it's therefore okay to skip
    the pool optimization.
    
    Note this patch also makes it easy to toggle the pool for benchmarking
    purposes:
    
      ./configure --with-coroutine-backend=ucontext \
                  --disable-coroutine-pool
    Reported-by: default avatarGabriel Kerneis <gabriel@kerneis.info>
    Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: default avatarGabriel Kerneis <gabriel@kerneis.info>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    70c60c08
qemu-coroutine.c 3.02 KB