> From: Kevin Wolf [mailto:kw...@redhat.com]
> > void replay_run_block_event(uint32_t id)
> > {
> >     Request *req;
> >     if (replay_mode == REPLAY_MODE_PLAY) {
> >         while (!(req = block_request_find(id))) {
> >             //aio_poll(bdrv_get_aio_context(req->bs), true);
> >             usleep(1);
> >         }
> 
> >         qemu_coroutine_enter(req->co, NULL);
> >     }
> > }
> >
> > > Can you provide more detail about the exact place where it's hanging,
> > > both in the coroutine and in the main "coroutine" that executes
> > > aio_poll()?

I've tried to replace usleep with aio_poll.
In this case replay cannot be made, because of recursive mutex lock:
aio_poll -> qemu_clock_get_ns -> <lock replay mutex> -> 
  replay_run_block_event -> aio_poll -> qemu_clock_get_ns -> <lock replay 
mutex> ->
  <assert failed>

Pavel Dovgalyuk


Reply via email to