librados could be referencing the wrong symbol when calling the
destructor. for example, a variable of type AioGetxattrsData in
IoCtxImpl.cc) could be destructed using the destructor defined in
librados.cc. this is reproduciable using
ceph_test_rados_api_aio --gtest_filter=LibRadosAio.XattrIter
Signed-off-by: Kefu Chai <kchai@redhat.com>
return aio_operate(oid, &op, c, snapc, 0);
}
+namespace {
struct AioGetxattrsData {
AioGetxattrsData(librados::AioCompletionImpl *c, map<string, bufferlist>* attrset,
librados::RadosClient *_client) :
map<std::string, bufferlist>* user_attrset;
librados::RadosClient *client;
};
+}
static void aio_getxattrs_complete(rados_completion_t c, void *arg) {
AioGetxattrsData *cdata = reinterpret_cast<AioGetxattrsData*>(arg);
return ret;
}
+namespace {
struct AioGetxattrsData {
AioGetxattrsData(rados_completion_t c, rados_xattrs_iter_t *_iter) :
iter(_iter), user_completion((librados::AioCompletionImpl*)c) {
rados_xattrs_iter_t *iter;
struct librados::C_AioCompleteAndSafe user_completion;
};
+}
static void rados_aio_getxattrs_complete(rados_completion_t c, void *arg) {
AioGetxattrsData *cdata = reinterpret_cast<AioGetxattrsData*>(arg);