]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rados: fix fd leak
authorSage Weil <sage@inktank.com>
Thu, 9 May 2013 15:49:51 +0000 (08:49 -0700)
committerSage Weil <sage@inktank.com>
Thu, 9 May 2013 17:48:59 +0000 (10:48 -0700)
Signed-off-by: Sage Weil <sage@inktank.com>
src/rados.cc

index 1f0cc2a662e7c870ac1ff1a8b4b736c7f26e810c..69a97a91748600b8ace7a5b63ceee9ea2ac056fd 100644 (file)
@@ -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)