|
57 | 57 | multicast/2
|
58 | 58 | ]).
|
59 | 59 |
|
| 60 | +%% Internal export |
| 61 | +-export([monitor_trace_port/2]). |
| 62 | + |
60 | 63 | %% gen_server callbacks
|
61 | 64 | -export([init/1,terminate/2, code_change/3,
|
62 | 65 | handle_call/3, handle_cast/2, handle_info/2]).
|
|
144 | 147 | %%
|
145 | 148 | %% event_order() = trace_ts | event_ts
|
146 | 149 | %% trace_pattern() = detail_level() | dbg_match_spec()
|
147 |
| -%% detail_level() = min | max | integer(X) when X =< 0, X >= 100 |
| 150 | +%% detail_level() = min | max | integer(X) when X >= 0, X =< 100 |
148 | 151 | %% trace_client() =
|
149 | 152 | %% {event_file, file_name()} |
|
150 | 153 | %% {dbg_trace_type(), dbg_trace_parameters()}
|
@@ -415,7 +418,9 @@ report_event(CollectorPid, DetailLevel, FromTo, Label, Contents) ->
|
415 | 418 | report_event(CollectorPid, DetailLevel, FromTo, FromTo, Label, Contents).
|
416 | 419 |
|
417 | 420 | report_event(CollectorPid, DetailLevel, From, To, Label, Contents)
|
418 |
| - when is_integer(DetailLevel), DetailLevel >= 0, DetailLevel =< 100 -> |
| 421 | + when is_integer(DetailLevel), |
| 422 | + DetailLevel >= ?detail_level_min, |
| 423 | + DetailLevel =< ?detail_level_max -> |
419 | 424 | TS= erlang:now(),
|
420 | 425 | E = #event{detail_level = DetailLevel,
|
421 | 426 | trace_ts = TS,
|
@@ -681,6 +686,17 @@ trace_spec_wrapper(EventFun, EndFun, EventInitialAcc)
|
681 | 686 | start_trace_port(Parameters) ->
|
682 | 687 | dbg:tracer(port, dbg:trace_port(ip, Parameters)).
|
683 | 688 |
|
| 689 | +monitor_trace_port(CollectorPid, Parameters) -> |
| 690 | + Res = start_trace_port(Parameters), |
| 691 | + spawn(fun() -> |
| 692 | + MonitorRef = erlang:monitor(process, CollectorPid), |
| 693 | + receive |
| 694 | + {'DOWN', MonitorRef, _, _, _} -> |
| 695 | + dbg:stop_clear() |
| 696 | + end |
| 697 | + end), |
| 698 | + Res. |
| 699 | + |
684 | 700 | %%----------------------------------------------------------------------
|
685 | 701 | %% iterate(Handle, Prev, Limit) ->
|
686 | 702 | %% iterate(Handle, Prev, Limit, undefined, Prev)
|
@@ -1033,7 +1049,7 @@ handle_call(clear_table, _From, S) ->
|
1033 | 1049 | handle_call(stop, _From, S) ->
|
1034 | 1050 | do_multicast(S#state.subscribers, close),
|
1035 | 1051 | case S#state.trace_global of
|
1036 |
| - true -> rpc:multicall(S#state.trace_nodes, dbg, stop, []); |
| 1052 | + true -> rpc:multicall(S#state.trace_nodes, dbg, stop_clear, []); |
1037 | 1053 | false -> ignore
|
1038 | 1054 | end,
|
1039 | 1055 | {stop, shutdown, ok, S};
|
@@ -1067,7 +1083,7 @@ handle_info(timeout, S) ->
|
1067 | 1083 | handle_info({nodeup, Node}, S) ->
|
1068 | 1084 | Port = S#state.trace_port,
|
1069 | 1085 | MaxQueue = S#state.trace_max_queue,
|
1070 |
| - case rpc:call(Node, ?MODULE, start_trace_port, [{Port, MaxQueue}]) of |
| 1086 | + case rpc:call(Node, ?MODULE, monitor_trace_port, [self(), {Port, MaxQueue}]) of |
1071 | 1087 | {ok, _} ->
|
1072 | 1088 | S2 = listen_on_trace_port(Node, Port, S),
|
1073 | 1089 | noreply(S2);
|
|
0 commit comments