diff options
author | Sage Weil <sage@inktank.com> | 2013-05-09 08:49:51 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-05-09 10:48:59 -0700 |
commit | 110a823fd43a60d829641ea03796331a37099244 (patch) | |
tree | 1477daece26ff1540d33a7e943cced14cf73b5ad | |
parent | 3dc7c3295b21e58cc7235ea52a3b1d9690879737 (diff) | |
download | ceph-110a823fd43a60d829641ea03796331a37099244.tar.gz |
rados: fix fd leak
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/rados.cc | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/rados.cc b/src/rados.cc index 1f0cc2a662e..69a97a91748 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) |