aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorLukas Larsson <[email protected]>2011-01-27 12:08:46 +0100
committerLukas Larsson <[email protected]>2011-01-27 12:08:46 +0100
commita74c4f6e655543c70179b8dc507d51e5603c7e30 (patch)
tree32af96d9505348a0fc8479a56156b25289e89a1e /lib
parent976ce69a8ada40e6b2e4664fc48d5f430e4ea1f2 (diff)
downloadotp-a74c4f6e655543c70179b8dc507d51e5603c7e30.tar.gz
otp-a74c4f6e655543c70179b8dc507d51e5603c7e30.tar.bz2
otp-a74c4f6e655543c70179b8dc507d51e5603c7e30.zip
Update remote collect to handle multiple requests at once
Diffstat (limited to 'lib')
-rw-r--r--lib/tools/src/cover.erl53
1 files changed, 28 insertions, 25 deletions
diff --git a/lib/tools/src/cover.erl b/lib/tools/src/cover.erl
index 689a702d52..48ab91db9c 100644
--- a/lib/tools/src/cover.erl
+++ b/lib/tools/src/cover.erl
@@ -776,30 +776,9 @@ remote_process_loop(State) ->
self() ! {remote,collect,Module,CollectorPid, ?SERVER};
{remote,collect,Module,CollectorPid,From} ->
-% spawn(?MODULE, do_remote_collect, [Module, CollectorPid]),
- MS =
- case Module of
- '_' -> ets:fun2ms(fun({M,C}) when is_atom(M) -> C end);
- _ -> ets:fun2ms(fun({M,C}) when M=:=Module -> C end)
- end,
- AllClauses = lists:flatten(ets:select(?COVER_TABLE,MS)),
-
- %% Sending clause by clause in order to avoid large lists
- lists:foreach(
- fun({M,F,A,C,_L}) ->
- Pattern =
- {#bump{module=M, function=F, arity=A, clause=C}, '_'},
- Bumps = ets:match_object(?COVER_TABLE, Pattern),
- %% Reset
- lists:foreach(fun({Bump,_N}) ->
- ets:insert(?COVER_TABLE, {Bump,0})
- end,
- Bumps),
- CollectorPid ! {chunk,Bumps}
- end,
- AllClauses),
- CollectorPid ! done,
- remote_reply(From, ok),
+ spawn(fun() ->
+ do_collect(Module, CollectorPid, From)
+ end),
remote_process_loop(State);
{remote,stop} ->
@@ -828,6 +807,30 @@ remote_process_loop(State) ->
end.
+do_collect(Module, CollectorPid, From) ->
+ MS =
+ case Module of
+ '_' -> ets:fun2ms(fun({M,C}) when is_atom(M) -> C end);
+ _ -> ets:fun2ms(fun({M,C}) when M=:=Module -> C end)
+ end,
+ AllClauses = lists:flatten(ets:select(?COVER_TABLE,MS)),
+
+ %% Sending clause by clause in order to avoid large lists
+ lists:foreach(
+ fun({M,F,A,C,_L}) ->
+ Pattern =
+ {#bump{module=M, function=F, arity=A, clause=C}, '_'},
+ Bumps = ets:match_object(?COVER_TABLE, Pattern),
+ %% Reset
+ lists:foreach(fun({Bump,_N}) ->
+ ets:insert(?COVER_TABLE, {Bump,0})
+ end,
+ Bumps),
+ CollectorPid ! {chunk,Bumps}
+ end,
+ AllClauses),
+ CollectorPid ! done,
+ remote_reply(From, ok).
reload_originals([{Module,_File}|Compiled]) ->
do_reload_original(Module),
@@ -938,7 +941,7 @@ get_data_for_remote_loading({Module,File}) ->
%% Create a match spec which returns the clause info {Module,InitInfo} and
%% all #bump keys for the given module with 0 number of calls.
ms(Module) ->
- ets:fun2ms(fun({Mod,InitInfo}) ->
+ ets:fun2ms(fun({Mod,InitInfo}) when Mod =:= Module ->
{Mod,InitInfo};
({Key,_}) when is_record(Key,bump),Key#bump.module=:=Module ->
{Key,0}