From: Stefan Hajnoczi <stefanha@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-devel@nongnu.org, Aarushi Mehta <mehta.aaru20@gmail.com>,
Fam Zheng <fam@euphon.net>,
Stefano Garzarella <sgarzare@redhat.com>,
Hanna Czenczek <hreitz@redhat.com>,
eblake@redhat.com, qemu-block@nongnu.org, hibriansong@gmail.com,
Stefan Weil <sw@weilnetz.de>, Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v4 06/12] aio: free AioContext when aio_context_new() fails
Date: Tue, 21 Oct 2025 16:42:40 -0400 [thread overview]
Message-ID: <20251021204240.GC4837@fedora> (raw)
In-Reply-To: <aOfdaCyxInxfoLhN@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 2828 bytes --]
On Thu, Oct 09, 2025 at 06:06:00PM +0200, Kevin Wolf wrote:
> Am 10.09.2025 um 19:56 hat Stefan Hajnoczi geschrieben:
> > g_source_destroy() only removes the GSource from the GMainContext it's
> > attached to, if any. It does not free it.
> >
> > Use g_source_unref() instead so that the AioContext (which embeds a
> > GSource) is freed. There is no need to call g_source_destroy() in
> > aio_context_new() because the GSource isn't attached to a GMainContext
> > yet.
> >
> > aio_ctx_finalize() expects everything to be set up already, so introduce
> > the new ctx->initialized boolean and do nothing when called with
> > !initialized. This also requires moving aio_context_setup() down after
> > event_notifier_init() since aio_ctx_finalize() won't release any
> > resources that aio_context_setup() acquired.
> >
> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> > Reviewed-by: Eric Blake <eblake@redhat.com>
> > ---
> > v2:
> > - Fix spacing in aio_ctx_finalize() argument list [Eric]
> > ---
> > include/block/aio.h | 3 +++
> > util/async.c | 14 +++++++++++---
> > 2 files changed, 14 insertions(+), 3 deletions(-)
> >
> > diff --git a/include/block/aio.h b/include/block/aio.h
> > index 1657740a0e..2760f308f5 100644
> > --- a/include/block/aio.h
> > +++ b/include/block/aio.h
> > @@ -291,6 +291,9 @@ struct AioContext {
> > gpointer epollfd_tag;
> >
> > const FDMonOps *fdmon_ops;
> > +
> > + /* Was aio_context_new() successful? */
> > + bool initialized;
> > };
> >
> > /**
> > diff --git a/util/async.c b/util/async.c
> > index a39410d675..34aaab4e9e 100644
> > --- a/util/async.c
> > +++ b/util/async.c
> > @@ -363,12 +363,16 @@ aio_ctx_dispatch(GSource *source,
> > }
> >
> > static void
> > -aio_ctx_finalize(GSource *source)
> > +aio_ctx_finalize(GSource *source)
> > {
> > AioContext *ctx = (AioContext *) source;
> > QEMUBH *bh;
> > unsigned flags;
> >
> > + if (!ctx->initialized) {
> > + return;
> > + }
>
> You had to move aio_context_setup() down in aio_context_new() to make
> sure that this doesn't leak things.
>
> How will we make sure that nobody adds another error path after
> allocating something after g_source_new()? g_source_new() doesn't seem
> to guarantee that AioContext starts zeroed, which is annoying if we
> wanted to just make aio_ctx_finalize() safe to be called from before the
> first error path.
Calling aio_ctx_finalize() in all cases was my first thought when
writing this patch, but not all of the cleanup code works even when
resources are NULL. That's why I took the ->initialized field approach.
I will add comments explaining how to handle resource cleanup and the
ordering with aio_context_setup().
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2025-10-22 18:46 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-10 17:56 [PATCH v4 00/12] aio: add the aio_add_sqe() io_uring API Stefan Hajnoczi
2025-09-10 17:56 ` [PATCH v4 01/12] aio-posix: fix race between io_uring CQE and AioHandler deletion Stefan Hajnoczi
2025-10-09 14:16 ` Kevin Wolf
2025-09-10 17:56 ` [PATCH v4 02/12] aio-posix: keep polling enabled with fdmon-io_uring.c Stefan Hajnoczi
2025-10-09 14:19 ` Kevin Wolf
2025-09-10 17:56 ` [PATCH v4 03/12] tests/unit: skip test-nested-aio-poll with io_uring Stefan Hajnoczi
2025-10-09 14:20 ` Kevin Wolf
2025-10-20 18:53 ` Stefan Hajnoczi
2025-09-10 17:56 ` [PATCH v4 04/12] aio-posix: integrate fdmon into glib event loop Stefan Hajnoczi
2025-10-09 15:25 ` Kevin Wolf
2025-10-20 20:08 ` Stefan Hajnoczi
2025-09-10 17:56 ` [PATCH v4 05/12] aio: remove aio_context_use_g_source() Stefan Hajnoczi
2025-10-09 15:46 ` Kevin Wolf
2025-10-09 16:59 ` Kevin Wolf
2025-10-21 19:10 ` Stefan Hajnoczi
2025-10-22 9:02 ` Kevin Wolf
2025-10-23 19:43 ` Stefan Hajnoczi
2025-10-23 20:47 ` Stefan Hajnoczi
2025-10-21 19:01 ` Stefan Hajnoczi
2025-09-10 17:56 ` [PATCH v4 06/12] aio: free AioContext when aio_context_new() fails Stefan Hajnoczi
2025-10-09 16:06 ` Kevin Wolf
2025-10-21 20:42 ` Stefan Hajnoczi [this message]
2025-09-10 17:56 ` [PATCH v4 07/12] aio: add errp argument to aio_context_setup() Stefan Hajnoczi
2025-10-09 16:16 ` Kevin Wolf
2025-10-14 19:48 ` Stefan Hajnoczi
2025-09-10 17:56 ` [PATCH v4 08/12] aio-posix: gracefully handle io_uring_queue_init() failure Stefan Hajnoczi
2025-10-09 16:19 ` Kevin Wolf
2025-10-14 19:49 ` Stefan Hajnoczi
2025-09-10 17:57 ` [PATCH v4 09/12] aio-posix: add aio_add_sqe() API for user-defined io_uring requests Stefan Hajnoczi
2025-10-10 15:23 ` Kevin Wolf
2025-10-10 16:20 ` Kevin Wolf
2025-10-23 20:18 ` Stefan Hajnoczi
2025-10-23 20:09 ` Stefan Hajnoczi
2025-09-10 17:57 ` [PATCH v4 10/12] aio-posix: avoid EventNotifier for cqe_handler_bh Stefan Hajnoczi
2025-09-10 17:57 ` [PATCH v4 11/12] block/io_uring: use aio_add_sqe() Stefan Hajnoczi
2025-09-10 17:57 ` [PATCH v4 12/12] block/io_uring: use non-vectored read/write when possible Stefan Hajnoczi
2025-10-10 16:33 ` Kevin Wolf
2025-10-14 19:52 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251021204240.GC4837@fedora \
--to=stefanha@redhat.com \
--cc=eblake@redhat.com \
--cc=fam@euphon.net \
--cc=hibriansong@gmail.com \
--cc=hreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=mehta.aaru20@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=sgarzare@redhat.com \
--cc=sw@weilnetz.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.