perf(emqx_router): optimise trans result receive

This commit is contained in:
Zaiming Shi 2021-05-05 20:10:42 +02:00 committed by Zaiming (Stone) Shi
parent 84e032f2e1
commit eeffc209df
1 changed files with 7 additions and 11 deletions

View File

@ -271,24 +271,20 @@ maybe_trans(Fun, Args) ->
trans(Fun, Args) ->
%% trigger selective receive optimization of compiler,
%% ideal for handling bursty traffic.
Ref = erlang:make_ref(),
Owner = self(),
{WPid, RefMon} = spawn_monitor(
{_, RefMon} = spawn_monitor(
fun() ->
Res = case mnesia:transaction(Fun, Args) of
{atomic, Ok} -> Ok;
{aborted, Reason} -> {error, Reason}
end,
Owner ! {Ref, Res}
exit({shutdown, Res})
end),
receive
{Ref, TransRes} ->
receive
{'DOWN', RefMon, process, WPid, normal} -> ok
end,
TransRes;
{'DOWN', RefMon, process, WPid, Info} ->
{error, {trans_crash, Info}}
{'DOWN', RefMon, process, _, Info} ->
case Info of
{shutdown, Res} -> Res;
_ -> {error, {trans_crash, Info}}
end
end.
lock_router() ->