From: Sebastien Ponce Date: Thu, 16 Oct 2014 09:56:52 +0000 (+0200) Subject: Fixed part of the seg fault described in bug 9356 by cleaning reference counting... X-Git-Tag: v0.88~53^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=52c97b0bea211698e7cf31df39cea631f4d92c48;p=ceph.git Fixed part of the seg fault described in bug 9356 by cleaning reference counting on MultiAioCompletionImpl Signed-off-by: Sebastien Ponce --- diff --git a/src/libradosstriper/RadosStriperImpl.cc b/src/libradosstriper/RadosStriperImpl.cc index 463a722008e6..5685b2fefdbe 100644 --- a/src/libradosstriper/RadosStriperImpl.cc +++ b/src/libradosstriper/RadosStriperImpl.cc @@ -382,7 +382,6 @@ static void striper_read_aio_req_complete(rados_striper_multi_completion_t c, vo reinterpret_cast(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)