]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commit
osdc: remove implicit LingerOp reference between watch/unwatch
authorCasey Bodley <cbodley@redhat.com>
Thu, 11 Dec 2025 19:19:01 +0000 (14:19 -0500)
committerCasey Bodley <cbodley@redhat.com>
Tue, 16 Dec 2025 15:55:32 +0000 (10:55 -0500)
commit1b0f873162d4bc357b230a78452531fdf39a6b25
tree3ad0e098ea05c83d1681b0ebb9286d9407c7e812
parent4064da7ce716b42ce4924787024fd7ce01182762
osdc: remove implicit LingerOp reference between watch/unwatch

before this change set, linger_register() returned a raw LingerOp
pointer with an implicit reference for the caller. for librados,
this implicit reference is only dropped when the corresponding
unwatch() calls linger_cancel()

after commit 94f42b648feea77bd09dc3fdb48e6db2b48c7717 introduced
linger_by_cookie(), unwatch() no longer has a safe way to drop this
implicit reference. to prevent LingerOp leaks when unwatch() returns
ENOTCONN, we can't hold this implicit reference count until unwatch()

linger_register() now returns an explicit reference to the caller as
intrusive_ptr<LingerOp>. this helps to guarantee that this reference
count gets dropped before the completion of watch()/aio_watch()

because linger_register() no longer acquires an implicit reference for
the caller, linger_cancel() no longer drops it with info->put()

Reported-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/osdc/Objecter.cc