Skip to content
  • Stefan Hajnoczi's avatar
    aio: add aio_context_acquire() and aio_context_release() · 98563fc3
    Stefan Hajnoczi authored
    
    
    It can be useful to run an AioContext from a thread which normally does
    not "own" the AioContext.  For example, request draining can be
    implemented by acquiring the AioContext and looping aio_poll() until all
    requests have been completed.
    
    The following pattern should work:
    
      /* Event loop thread */
      while (running) {
          aio_context_acquire(ctx);
          aio_poll(ctx, true);
          aio_context_release(ctx);
      }
    
      /* Another thread */
      aio_context_acquire(ctx);
      bdrv_read(bs, 0x1000, buf, 1);
      aio_context_release(ctx);
    
    This patch implements aio_context_acquire() and aio_context_release().
    
    Note that existing aio_poll() callers do not need to worry about
    acquiring and releasing - it is only needed when multiple threads will
    call aio_poll() on the same AioContext.
    
    Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
    98563fc3