Am 23.03.2023 um 15:48 hat Stefan Hajnoczi geschrieben: > If another thread calls aio_set_fd_handler() while the IOThread event > loop is upgrading from ppoll(2) to epoll(7) then we might miss new > AioHandlers. The epollfd will not monitor the new AioHandler's fd, > resulting in hangs. > > Take the AioHandler list lock while upgrading to epoll. This prevents > AioHandlers from changing while epoll is being set up. If we cannot lock > because we're in a nested event loop, then don't upgrade to epoll (it > will happen next time we're not in a nested call). > > The downside to taking the lock is that the aio_set_fd_handler() thread > has to wait until the epoll upgrade is finished, which involves many > epoll_ctl(2) system calls. However, this scenario is rare and I couldn't > think of another solution that is still simple. > > Reported-by: Qing Wang <qinw...@redhat.com> > Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2090998 > Cc: Paolo Bonzini <pbonz...@redhat.com> > Cc: Fam Zheng <f...@euphon.net> > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > --- > v2: > - Use qemu_lockcnt_inc_and_unlock() instead of qemu_lockcnt_unlock() [Paolo]
Thanks, applied to the block branch. Kevin