]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
client: don't allocate dir_result_t::buffer dynamically
authorYan, Zheng <zyan@redhat.com>
Fri, 22 Apr 2016 01:31:00 +0000 (09:31 +0800)
committerGreg Farnum <gfarnum@redhat.com>
Sun, 12 Jun 2016 21:09:55 +0000 (14:09 -0700)
Signed-off-by: Yan, Zheng <zyan@redhat.com>
(cherry picked from commit c41ceb9f1425432295a52965de8d4a23b15fe5e5)

Signed-off-by: Greg Farnum <gfarnum@redhat.com
src/client/Client.cc
src/client/Client.h

index 0442051d789d28dec8c4f219b451372cc9c52aa2..9a6777f82c1d508f8a64393c0741ca4b674b2fb3 100644 (file)
@@ -175,9 +175,8 @@ bool Client::CommandHook::call(std::string command, cmdmap_t& cmdmap,
 
 dir_result_t::dir_result_t(Inode *in)
   : inode(in), owner_uid(-1), owner_gid(-1), offset(0), this_offset(2),
-    next_offset(2), release_count(0), ordered_count(0), start_shared_gen(0),
-    buffer(0) {
-}
+    next_offset(2), release_count(0), ordered_count(0), start_shared_gen(0)
+  { }
 
 void Client::_reset_faked_inos()
 {
@@ -6905,10 +6904,7 @@ void Client::_readdir_rechoose_frag(dir_result_t *dirp)
 void Client::_readdir_drop_dirp_buffer(dir_result_t *dirp)
 {
   ldout(cct, 10) << "_readdir_drop_dirp_buffer " << dirp << dendl;
-  if (dirp->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<pair<string,InodeRef> >;
-    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<string,InodeRef>& ent = (*dirp->buffer)[off - dirp->this_offset];
+          off - dirp->this_offset < dirp->buffer.size()) {
+      pair<string,InodeRef>& 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);
index d912db05c058ee19b4e25db3fc5679974aa11be4..10e338aa2a6540b145790fc2de7875094a80f758 100644 (file)
@@ -189,7 +189,7 @@ struct dir_result_t {
   int start_shared_gen;  // dir shared_gen at start of readdir
 
   frag_t buffer_frag;
-  vector<pair<string,InodeRef> > *buffer;
+  vector<pair<string,InodeRef> > 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();
   }
 };