Fixed a file descriptor leak while reading file. There were two early returns without closing the file in code common to the `ReadFile` operation in the v1 Operator API and the `/files/read` endpoint.
Review: https://reviews.apache.org/r/50208/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/8476cf1e Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/8476cf1e Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/8476cf1e Branch: refs/heads/master Commit: 8476cf1e58b6fa2160e3bb109e538fb9d94ccc58 Parents: b3d57a8 Author: zhou xing <xingz...@cn.ibm.com> Authored: Thu Jul 21 13:31:14 2016 -0700 Committer: Anand Mazumdar <an...@apache.org> Committed: Thu Jul 21 13:31:14 2016 -0700 ---------------------------------------------------------------------- src/files/files.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/8476cf1e/src/files/files.cpp ---------------------------------------------------------------------- diff --git a/src/files/files.cpp b/src/files/files.cpp index b88e34e..793d68e 100644 --- a/src/files/files.cpp +++ b/src/files/files.cpp @@ -653,6 +653,7 @@ Future<Try<tuple<size_t, string>, FilesError>> FilesProcess::_read( // Return the size of file if length is 0. if (length == 0) { + os::close(fd.get()); return std::make_tuple(size, ""); } @@ -687,7 +688,8 @@ Future<Try<tuple<size_t, string>, FilesError>> FilesProcess::_read( .then([size, data](const size_t dataLength) -> Try<tuple<size_t, string>, FilesError> { return std::make_tuple(size, string(data.get(), dataLength)); - }); + }) + .onAny([fd]() { os::close(fd.get()); }); }