On Wed, Aug 28, 2013 at 11:25:33AM +0800, Wenchao Xia wrote: > > +void aio_context_release(AioContext *ctx) > > +{ > > + qemu_mutex_lock(&ctx->acquire_lock); > > + assert(ctx->owner && qemu_thread_is_self(ctx->owner)); > > + ctx->owner = NULL; > > + qemu_cond_signal(&ctx->acquire_cond); > > + qemu_mutex_unlock(&ctx->acquire_lock); > > +} > if main thread have call bdrv_aio_readv(cb *bdrv_cb), now it > is possible bdrv_cb will be executed in another thread which > aio_context_acquire() it. I think there are some ways to solve, > but leave a comments here now to tip better?
Callbacks, BHs, and timers are executed in the thread that calls aio_poll(). This is safe since other threads cannot run aio_poll() or submit new block I/O requests at the same time. In other words: code should only care which AioContext it runs under, not which thread ID it runs under. (I think we talked about this on IRC a few weeks ago.) Are there any situations you are worried about? Stefan