You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by fd...@apache.org on 2011/11/29 15:13:28 UTC
[2/3] git commit: Use proc_lib for couch_file initialization
Use proc_lib for couch_file initialization
Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/0b89f5ac
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/0b89f5ac
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/0b89f5ac
Branch: refs/heads/COUCHDB-1342
Commit: 0b89f5ac4110208618e8d36c0a2d14d4520f5a5b
Parents: 6c0f7f7
Author: Filipe David Borba Manana <fd...@apache.org>
Authored: Mon Nov 28 23:43:59 2011 +0000
Committer: Filipe David Borba Manana <fd...@apache.org>
Committed: Mon Nov 28 23:43:59 2011 +0000
----------------------------------------------------------------------
src/couchdb/couch_file.erl | 42 +++++++++++---------------------------
1 files changed, 12 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb/blob/0b89f5ac/src/couchdb/couch_file.erl
----------------------------------------------------------------------
diff --git a/src/couchdb/couch_file.erl b/src/couchdb/couch_file.erl
index 0e007bb..3979eb7 100644
--- a/src/couchdb/couch_file.erl
+++ b/src/couchdb/couch_file.erl
@@ -56,27 +56,7 @@ open(Filepath) ->
open(Filepath, []).
open(Filepath, Options) ->
- case gen_server:start_link(couch_file,
- {Filepath, Options, self(), Ref = make_ref()}, []) of
- {ok, Fd} ->
- {ok, Fd};
- ignore ->
- % get the error
- receive
- {Ref, Pid, Error} ->
- case process_info(self(), trap_exit) of
- {trap_exit, true} -> receive {'EXIT', Pid, _} -> ok end;
- {trap_exit, false} -> ok
- end,
- case Error of
- {error, eacces} -> {file_permission_error, Filepath};
- _ -> Error
- end
- end;
- Error ->
- Error
- end.
-
+ proc_lib:start_link(?MODULE, init, [{Filepath, Options}]).
%%----------------------------------------------------------------------
%% Purpose: To append an Erlang term to the end of the file.
@@ -283,15 +263,9 @@ write_header(Fd, Data) ->
ok = gen_server:call(Fd, {write_header, FinalBin}, infinity).
-
-
-init_status_error(ReturnPid, Ref, Error) ->
- ReturnPid ! {Ref, self(), Error},
- ignore.
-
% server functions
-init({Filepath, Options, ReturnPid, Ref}) ->
+init({Filepath, Options}) ->
try
ok = maybe_create_file(Filepath, Options),
process_flag(trap_exit, true),
@@ -299,10 +273,18 @@ init({Filepath, Options, ReturnPid, Ref}) ->
{ok, Writer, Eof} = proc_lib:start_link(
?MODULE, spawn_writer, [Filepath, self()]),
maybe_track_open_os_files(Options),
- {ok, #file{reader = Reader, writer = Writer, eof = Eof}}
+ proc_lib:init_ack({ok, self()}),
+ InitState = #file{
+ reader = Reader,
+ writer = Writer,
+ eof = Eof
+ },
+ gen_server:enter_loop(?MODULE, [], InitState)
catch
+ error:{badmatch, {error, eacces}} ->
+ proc_lib:init_ack({file_permission_error, Filepath});
error:{badmatch, Error} ->
- init_status_error(ReturnPid, Ref, Error)
+ proc_lib:init_ack(Error)
end.
maybe_create_file(Filepath, Options) ->