On Mon, Mar 9, 2026 at 4:33 PM Stefan Hajnoczi <[email protected]> wrote: > > On Thu, Mar 05, 2026 at 10:24:49PM +0800, Zhang Chen wrote: > > Introduce iothread_get_aio_context() with a 'holder' argument and its > > counterpart iothread_put_aio_context(). > > > > Previously, users of an IOThread's AioContext did not explicitly > > record their identity, making it difficult to debug which devices or > > subsystems were pinning an IOThread. > > > > This patch enhances the reference counting mechanism by: > > 1. Automatically incrementing the object reference count when a context > > is retrieved. > > 2. Tracking holders by name using iothread_ref() and iothread_unref(). > > > > In iothread_instance_finalize(), we now retrieve the source name from > > the GMainContext to correctly unref the initial internal holder. > > > > Signed-off-by: Zhang Chen <[email protected]> > > --- > > include/system/iothread.h | 3 ++- > > iothread.c | 28 ++++++++++++++++++++++++++-- > > 2 files changed, 28 insertions(+), 3 deletions(-) > > > > diff --git a/include/system/iothread.h b/include/system/iothread.h > > index 21a76bd70d..595abeefbe 100644 > > --- a/include/system/iothread.h > > +++ b/include/system/iothread.h > > @@ -47,7 +47,8 @@ DECLARE_INSTANCE_CHECKER(IOThread, IOTHREAD, > > > > char *iothread_get_id(IOThread *iothread); > > IOThread *iothread_by_id(const char *id); > > -AioContext *iothread_get_aio_context(IOThread *iothread); > > +AioContext *iothread_get_aio_context(IOThread *iothread, const char > > *holder); > > This commit breaks all iothread_get_aio_context() callers because they > are not yet converted. The build will fail here. > > Every commit must build and pass the tests. This is necessary so that > git-bisect(1) works and it also makes backporting patches much easier > when there are no implicit dependencies between commits. > > Please structure this patch series in a way that keeps the build and > tests passing. One way to do this is to give the new API a different > name like: > > AioContext *iothread_get_aio_context(IOThread *iothread); > + AioContext *iothread_ref_and_get_aio_context(IOThread *iothread, const char > *holder); > > That name also makes clear that a reference will be taken on the > IOThread. You could then require callers to call iothread_unref() > directly instead of iothread_put_aio_context(). > > One of the last commits in the patch series could remove the old > iothread_get_aio_context() after everything has been converted.
Make sense, thanks for detailed instructions. I even considered combining the later parts into a single patch to solve this problem, but that would be too difficult for the individual modules to review. Thanks Chen
