Skip to content
Snippets Groups Projects
  • Paolo Bonzini's avatar
    f0d43b1e
    coroutine-lock: qemu_co_queue_restart_all is a coroutine-only qemu_co_enter_all · f0d43b1e
    Paolo Bonzini authored
    
    qemu_co_queue_restart_all is basically the same as qemu_co_enter_all
    but without a QemuLockable argument.  That's perfectly fine, but only as
    long as the function is marked coroutine_fn.  If used outside coroutine
    context, qemu_co_queue_wait will attempt to take the lock and that
    is just broken: if you are calling qemu_co_queue_restart_all outside
    coroutine context, the lock is going to be a QemuMutex which cannot be
    taken twice by the same thread.
    
    The patch adds the marker to qemu_co_queue_restart_all and to its sole
    non-coroutine_fn caller; it then reimplements the function in terms of
    qemu_co_enter_all_impl, to remove duplicated code and to clarify that the
    latter also works in coroutine context.
    
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20220427130830.150180-4-pbonzini@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    f0d43b1e
    History
    coroutine-lock: qemu_co_queue_restart_all is a coroutine-only qemu_co_enter_all
    Paolo Bonzini authored
    
    qemu_co_queue_restart_all is basically the same as qemu_co_enter_all
    but without a QemuLockable argument.  That's perfectly fine, but only as
    long as the function is marked coroutine_fn.  If used outside coroutine
    context, qemu_co_queue_wait will attempt to take the lock and that
    is just broken: if you are calling qemu_co_queue_restart_all outside
    coroutine context, the lock is going to be a QemuMutex which cannot be
    taken twice by the same thread.
    
    The patch adds the marker to qemu_co_queue_restart_all and to its sole
    non-coroutine_fn caller; it then reimplements the function in terms of
    qemu_co_enter_all_impl, to remove duplicated code and to clarify that the
    latter also works in coroutine context.
    
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20220427130830.150180-4-pbonzini@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>