diff options
author | Sage Weil <sage@inktank.com> | 2013-10-14 17:06:13 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-10-14 17:06:13 -0700 |
commit | a3368cfc5f18fe7e383d70c041e3318adf1ddd01 (patch) | |
tree | 83f9c89bc054e188ddac8828e050f7495a6ca22e | |
parent | 02b5eb281a1a53fcf9f2512d8e7c93aa15303b4a (diff) | |
parent | f2645e1c6d7383a0ace3b239f4304e353249c4bb (diff) | |
download | ceph-a3368cfc5f18fe7e383d70c041e3318adf1ddd01.tar.gz |
Merge remote-tracking branch 'gh/next'
-rw-r--r-- | src/include/rados/librados.hpp | 7 | ||||
-rw-r--r-- | src/librados/PoolAsyncCompletionImpl.h | 5 | ||||
-rw-r--r-- | src/rgw/rgw_op.cc | 7 |
3 files changed, 17 insertions, 2 deletions
diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp index 3f6d025ff41..c8de9f9df33 100644 --- a/src/include/rados/librados.hpp +++ b/src/include/rados/librados.hpp @@ -789,7 +789,12 @@ namespace librados int cluster_stat(cluster_stat_t& result); int cluster_fsid(std::string *fsid); - /* pool aio */ + /* + * pool aio + * + * It is up to the caller to release the completion handler, even if the pool_create_async() + * and/or pool_delete_async() fails and does not send the async request + */ static PoolAsyncCompletion *pool_async_create_completion(); // -- aio -- diff --git a/src/librados/PoolAsyncCompletionImpl.h b/src/librados/PoolAsyncCompletionImpl.h index efb89641466..443b2c23a17 100644 --- a/src/librados/PoolAsyncCompletionImpl.h +++ b/src/librados/PoolAsyncCompletionImpl.h @@ -94,6 +94,9 @@ namespace librados { C_PoolAsync_Safe(PoolAsyncCompletionImpl *_c) : c(_c) { c->get(); } + ~C_PoolAsync_Safe() { + c->put(); + } void finish(int r) { c->lock.Lock(); @@ -109,7 +112,7 @@ namespace librados { c->lock.Lock(); } - c->put_unlock(); + c->lock.Unlock(); } }; } diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index b9b4c53d696..2e07e3fcde6 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1658,6 +1658,13 @@ void RGWPutMetadata::execute() } } + map<string, string>::iterator giter; + for (giter = s->generic_attrs.begin(); giter != s->generic_attrs.end(); ++giter) { + bufferlist& attrbl = attrs[giter->first]; + const string& val = giter->second; + attrbl.append(val.c_str(), val.size() + 1); + } + if (has_policy) { policy.encode(bl); attrs[RGW_ATTR_ACL] = bl; |