Skip to content
  • Stefan Hajnoczi's avatar
    threadpool: add thread_pool_new() and thread_pool_free() · f7311ccc
    Stefan Hajnoczi authored
    
    
    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: default avatarStefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    f7311ccc