From: Yan, Zheng Date: Fri, 22 Apr 2016 01:31:00 +0000 (+0800) Subject: client: don't allocate dir_result_t::buffer dynamically X-Git-Tag: v10.2.2~8^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=75edb5b1c8bcdbc24b4cd6cb811e9c07608f09f5;p=ceph.git client: don't allocate dir_result_t::buffer dynamically Signed-off-by: Yan, Zheng (cherry picked from commit c41ceb9f1425432295a52965de8d4a23b15fe5e5) Signed-off-by: Greg Farnum buffer) { - delete dirp->buffer; - dirp->buffer = NULL; - } + dirp->buffer.clear(); } int Client::_readdir_get_frag(dir_result_t *dirp) @@ -6958,8 +6954,7 @@ int Client::_readdir_get_frag(dir_result_t *dirp) _readdir_drop_dirp_buffer(dirp); - dirp->buffer = new vector >; - dirp->buffer->swap(req->readdir_result); + dirp->buffer.swap(req->readdir_result); if (fg != req->readdir_reply_frag) { fg = req->readdir_reply_frag; @@ -6970,7 +6965,7 @@ int Client::_readdir_get_frag(dir_result_t *dirp) dirp->this_offset = dirp->next_offset; ldout(cct, 10) << "_readdir_get_frag " << dirp << " got frag " << dirp->buffer_frag << " this_offset " << dirp->this_offset - << " size " << dirp->buffer->size() << dendl; + << " size " << dirp->buffer.size() << dendl; if (req->readdir_end) { dirp->last_name.clear(); @@ -7154,7 +7149,7 @@ int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p) if (dirp->at_end()) return 0; - if (dirp->buffer_frag != dirp->frag() || dirp->buffer == NULL) { + if (dirp->buffer_frag != dirp->frag() || dirp->buffer.empty()) { int r = _readdir_get_frag(dirp); if (r) return r; @@ -7164,13 +7159,13 @@ int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p) off = dirp->fragpos(); } - ldout(cct, 10) << "off " << off << " this_offset " << hex << dirp->this_offset << dec << " size " << dirp->buffer->size() + ldout(cct, 10) << "off " << off << " this_offset " << hex << dirp->this_offset << dec << " size " << dirp->buffer.size() << " frag " << fg << dendl; dirp->offset = dir_result_t::make_fpos(fg, off); while (off >= dirp->this_offset && - off - dirp->this_offset < dirp->buffer->size()) { - pair& ent = (*dirp->buffer)[off - dirp->this_offset]; + off - dirp->this_offset < dirp->buffer.size()) { + pair& ent = dirp->buffer[off - dirp->this_offset]; int stmask = fill_stat(ent.second, &st); fill_dirent(&de, ent.first.c_str(), st.st_mode, st.st_ino, dirp->offset + 1); diff --git a/src/client/Client.h b/src/client/Client.h index d912db05c05..10e338aa2a6 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -189,7 +189,7 @@ struct dir_result_t { int start_shared_gen; // dir shared_gen at start of readdir frag_t buffer_frag; - vector > *buffer; + vector > buffer; string at_cache_name; // last entry we successfully returned @@ -218,8 +218,7 @@ struct dir_result_t { next_offset = 2; this_offset = 0; offset = 0; - delete buffer; - buffer = 0; + buffer.clear(); } };