]> git.proxmox.com Git - qemu.git/commit - thread-pool.c
threadpool: add thread_pool_new() and thread_pool_free()
authorStefan Hajnoczi <stefanha@redhat.com>
Thu, 7 Mar 2013 12:41:46 +0000 (13:41 +0100)
committerStefan Hajnoczi <stefanha@redhat.com>
Fri, 15 Mar 2013 15:07:50 +0000 (16:07 +0100)
commitf7311ccc630d925e7351e9440b7ad8bc6f0a51de
tree7d0acbba48230b50a45cf73531e6c47920dff1ae
parentb811203cf2fbf83e26f8e8feb2c77784259a4cbd
threadpool: add thread_pool_new() and thread_pool_free()

ThreadPool is tied to an AioContext through its event notifier, which
dictates in which AioContext the work item's callback function will be
invoked.

In order to support multiple AioContexts we need to support multiple
ThreadPool instances.

This patch adds the new/free functions.  The free function deserves
special attention because it quiesces remaining worker threads.  This
requires a new condition variable and a "stopping" flag to let workers
know they should terminate once idle.

We never needed to do this before since the global threadpool was not
explicitly destroyed until process termination.

Also stash the AioContext pointer in ThreadPool so that we can call
aio_set_event_notifier() in thread_pool_free().  We didn't need to hold
onto AioContext previously since there was no free function.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
include/block/thread-pool.h
thread-pool.c