From: Sage Weil Date: Thu, 9 May 2013 15:49:51 +0000 (-0700) Subject: rados: fix fd leak X-Git-Tag: v0.63~49^2^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=110a823fd43a60d829641ea03796331a37099244;p=ceph.git rados: fix fd leak Signed-off-by: Sage Weil --- diff --git a/src/rados.cc b/src/rados.cc index 1f0cc2a662e7..69a97a917486 100644 --- a/src/rados.cc +++ b/src/rados.cc @@ -192,25 +192,28 @@ static int do_get(IoCtx& io_ctx, const char *objname, const char *outfile, unsig } uint64_t offset = 0; + int ret; while (true) { bufferlist outdata; - int ret = io_ctx.read(oid, outdata, op_size, offset); + ret = io_ctx.read(oid, outdata, op_size, offset); if (ret <= 0) { - return ret; + goto out; } ret = outdata.write_fd(fd); if (ret < 0) { cerr << "error writing to file: " << cpp_strerror(ret) << std::endl; - return ret; + goto out; } if (outdata.length() < op_size) break; offset += outdata.length(); } + ret = 0; + out: if (fd != 1) TEMP_FAILURE_RETRY(::close(fd)); - return 0; + return ret; } static int do_copy(IoCtx& io_ctx, const char *objname, IoCtx& target_ctx, const char *target_obj)