]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Fixed part of the seg fault described in bug 9356 by cleaning reference counting...
authorSebastien Ponce <sebastien.ponce@cern.ch>
Thu, 16 Oct 2014 09:56:52 +0000 (11:56 +0200)
committerSebastien Ponce <sebastien.ponce@cern.ch>
Mon, 20 Oct 2014 16:46:31 +0000 (18:46 +0200)
Signed-off-by: Sebastien Ponce <sebastien.ponce@cern.ch>
src/libradosstriper/RadosStriperImpl.cc

index 463a722008e6ef06f53abfcf28429259977bf986..5685b2fefdbe85278c0c3db9b717054e3dccad2e 100644 (file)
@@ -382,7 +382,6 @@ static void striper_read_aio_req_complete(rados_striper_multi_completion_t c, vo
     reinterpret_cast<libradosstriper::MultiAioCompletionImpl*>(c);
   cdata->complete(comp->rval);
   delete cdata;
-  comp->ref--;
 }
 
 static void rados_req_read_safe(rados_completion_t c, void *arg)
@@ -491,6 +490,7 @@ int libradosstriper::RadosStriperImpl::aio_read(const std::string& soid,
       break;
   }
   nc->finish_adding_requests();
+  nc->put();
   return r;
 }
 
@@ -683,7 +683,6 @@ static void striper_write_aio_req_complete(rados_striper_multi_completion_t c, v
   cdata->complete(comp->rval);
   if (0 == comp->pending_safe) {
     delete cdata;
-    comp->ref--;
   }
 }
 
@@ -696,7 +695,6 @@ static void striper_write_aio_req_safe(rados_striper_multi_completion_t c, void
   cdata->safe(comp->rval);
   if (0 == comp->pending_complete) {
     delete cdata;
-    comp->ref--;
   }
 }
 
@@ -715,7 +713,9 @@ int libradosstriper::RadosStriperImpl::aio_write_in_open_object(const std::strin
   nc->set_complete_callback(cdata, striper_write_aio_req_complete);
   nc->set_safe_callback(cdata, striper_write_aio_req_safe);
   // internal asynchronous API
-  return internal_aio_write(soid, nc, bl, len, off, layout);
+  int rc = internal_aio_write(soid, nc, bl, len, off, layout);
+  nc->put();
+  return rc;
 }
 
 static void rados_req_write_safe(rados_completion_t c, void *arg)