Repository: couchdb-couch
Updated Branches:
refs/heads/2657-fix-cassim-fabric-calls 369b75a70 -> 0c606129e (forced update)
WIP: add couch_util:with_proc/{3,4}
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch/commit/0c606129
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch/tree/0c606129
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch/diff/0c606129
Branch: refs/heads/2657-fix-cassim-fabric-calls
Commit: 0c606129ea16381e6225c401a1bca12d4b9c8a9d
Parents: 43f1cfe
Author: Russell Branca <[email protected]>
Authored: Mon Apr 20 19:57:20 2015 +0000
Committer: Russell Branca <[email protected]>
Committed: Mon Apr 20 20:36:10 2015 +0000
----------------------------------------------------------------------
src/couch_util.erl | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/0c606129/src/couch_util.erl
----------------------------------------------------------------------
diff --git a/src/couch_util.erl b/src/couch_util.erl
index 7e16866..c01f9fe 100644
--- a/src/couch_util.erl
+++ b/src/couch_util.erl
@@ -33,6 +33,7 @@
-export([integer_to_boolean/1, boolean_to_integer/1]).
-export([find_in_binary/2]).
-export([callback_exists/3, validate_callback_exists/3]).
+-export([with_proc/4]).
-include_lib("couch/include/couch_db.hrl").
@@ -569,3 +570,18 @@ ensure_loaded(Module) when is_atom(Module) ->
false
end;
ensure_loaded(_Module) -> false.
+
+
+with_proc(M, F, A, Timeout) ->
+ {Pid, Ref} = spawn_monitor(fun() ->
+ exit(erlang:apply(M, F, A))
+ end),
+ receive
+ {'DOWN', Ref, process, Pid, Resp} ->
+ {ok, Resp};
+ {'DOWN', Ref, process, Pid, Error} ->
+ {error, Error}
+ after Timeout ->
+ erlang:demonitor(Ref, [flush]),
+ {error, timeout}
+ end.