This is an automated email from the ASF dual-hosted git repository. jan pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit b05c1775fb85d7fb979879fd16dba4ed736a2a96 Author: AlexanderKaraberov <[email protected]> AuthorDate: Wed Feb 14 17:10:32 2018 +0100 Proper error handling for file:open() call --- src/couch/src/couch_file.erl | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/couch/src/couch_file.erl b/src/couch/src/couch_file.erl index 7b6f519..8a1b205 100644 --- a/src/couch/src/couch_file.erl +++ b/src/couch/src/couch_file.erl @@ -213,8 +213,12 @@ truncate(Fd, Pos) -> %%---------------------------------------------------------------------- sync(Filepath) when is_list(Filepath) -> - {ok, Fd} = file:open(Filepath, [append, raw]), - try ok = file:sync(Fd) after ok = file:close(Fd) end; + case file:open(Filepath, [append, raw]) of + {ok, Fd} -> + try ok = file:sync(Fd) after ok = file:close(Fd) end; + Error -> + throw(Error) + end; sync(Fd) -> gen_server:call(Fd, sync, infinity). @@ -389,14 +393,18 @@ init({Filepath, Options, ReturnPid, Ref}) -> % open in read mode first, so we don't create the file if it doesn't exist. case file:open(Filepath, [read, raw]) of {ok, Fd_Read} -> - {ok, Fd} = file:open(Filepath, OpenOptions), - %% Save Fd in process dictionary for debugging purposes - put(couch_file_fd, {Fd, Filepath}), - ok = file:close(Fd_Read), - maybe_track_open_os_files(Options), - {ok, Eof} = file:position(Fd, eof), - erlang:send_after(?INITIAL_WAIT, self(), maybe_close), - {ok, #file{fd=Fd, eof=Eof, is_sys=IsSys, pread_limit=Limit}}; + case file:open(Filepath, OpenOptions) of + {ok, Fd} -> + %% Save Fd in process dictionary for debugging purposes + put(couch_file_fd, {Fd, Filepath}), + ok = file:close(Fd_Read), + maybe_track_open_os_files(Options), + {ok, Eof} = file:position(Fd, eof), + erlang:send_after(?INITIAL_WAIT, self(), maybe_close), + {ok, #file{fd=Fd, eof=Eof, is_sys=IsSys, pread_limit=Limit}}; + Error -> + init_status_error(ReturnPid, Ref, Error) + end; Error -> init_status_error(ReturnPid, Ref, Error) end -- To stop receiving notification emails like this one, please contact [email protected].
