From: Venky Shankar Date: Wed, 9 Nov 2016 11:28:06 +0000 (+0530) Subject: librados: drop io_ctx_impl on ioctx_create/create2 X-Git-Tag: v11.1.0~219^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cce335fccfb5d9d9d211ad58d6d9cdfbb5f44e76;p=ceph.git librados: drop io_ctx_impl on ioctx_create/create2 close() was never called for the passed in IoCtx which could probably result in an IoCtx leak if the original IoCtx was a valid pool context allocated earlier. Its kind of better to do it here rather than to leave the destruction on the caller for better (or cleaner) common case handling. Signed-off-by: Venky Shankar --- diff --git a/src/librados/librados.cc b/src/librados/librados.cc index 0991de4e9190..44d6e6b287a9 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -2413,6 +2413,7 @@ int librados::Rados::ioctx_create(const char *name, IoCtx &io) int ret = rados_ioctx_create((rados_t)client, name, &p); if (ret) return ret; + io.close(); io.io_ctx_impl = (IoCtxImpl*)p; return 0; } @@ -2423,6 +2424,7 @@ int librados::Rados::ioctx_create2(int64_t pool_id, IoCtx &io) int ret = rados_ioctx_create2((rados_t)client, pool_id, &p); if (ret) return ret; + io.close(); io.io_ctx_impl = (IoCtxImpl*)p; return 0; } diff --git a/src/test/librados_test_stub/LibradosTestStub.cc b/src/test/librados_test_stub/LibradosTestStub.cc index e996adc71eb4..005c576bc8bd 100644 --- a/src/test/librados_test_stub/LibradosTestStub.cc +++ b/src/test/librados_test_stub/LibradosTestStub.cc @@ -906,6 +906,8 @@ int Rados::ioctx_create(const char *name, IoCtx &io) { if (ret) { return ret; } + + io.close(); io.io_ctx_impl = reinterpret_cast(p); return 0; } @@ -917,6 +919,8 @@ int Rados::ioctx_create2(int64_t pool_id, IoCtx &io) if (ret) { return ret; } + + io.close(); io.io_ctx_impl = reinterpret_cast(p); return 0; }