瀏覽代碼

ft: 优化undef的情况

master
SisMaker 3 年之前
父節點
當前提交
548f566911
共有 6 個檔案被更改,包括 37 行新增24 行删除
  1. +9
    -1
      src/gen_apu.erl
  2. +7
    -2
      src/gen_call.erl
  3. +2
    -7
      src/gen_emm.erl
  4. +2
    -7
      src/gen_ipc.erl
  5. +9
    -1
      src/gen_mpp.erl
  6. +8
    -6
      src/gen_srv.erl

+ 9
- 1
src/gen_apu.erl 查看文件

@ -5,7 +5,7 @@
-include_lib("kernel/include/logger.hrl"). -include_lib("kernel/include/logger.hrl").
-import(gen_call, [gcall/3, gcall/4, greply/2]).
-import(gen_call, [gcall/3, gcall/4, greply/2, try_greply/2]).
-export([ -export([
%% API for gen_apu %% API for gen_apu
@ -756,6 +756,9 @@ matchCallMsg(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurStat
catch catch
throw:Result -> throw:Result ->
handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, From, false); handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, From, false);
error:undef ->
try_greply(From, {error, undef}),
receiveIng(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, false);
Class:Reason:Strace -> Class:Reason:Strace ->
terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {{call, From}, Request}) terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {{call, From}, Request})
end. end.
@ -776,6 +779,8 @@ matchCastMsg(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurStat
catch catch
throw:Result -> throw:Result ->
handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, false, false); handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, false, false);
error:undef ->
receiveIng(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, false);
Class:Reason:Strace -> Class:Reason:Strace ->
terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {cast, Cast}) terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {cast, Cast})
end. end.
@ -796,6 +801,9 @@ matchMFA(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, F
catch catch
throw:Result -> throw:Result ->
handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, From, true); handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, From, true);
error:undef ->
try_greply(From, {error, undef}),
receiveIng(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, false);
Class:Reason:Strace -> Class:Reason:Strace ->
terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {mfa, MFA}) terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {mfa, MFA})
end. end.

+ 7
- 2
src/gen_call.erl 查看文件

@ -1,6 +1,6 @@
-module(gen_call). -module(gen_call).
-export([gcall/3, gcall/4, greply/2]).
-export([gcall/3, gcall/4, greply/2, try_greply/2]).
-define(default_timeout, 5000). -define(default_timeout, 5000).
@ -126,4 +126,9 @@ greply({_To, [alias | Alias] = Tag}, Reply) when is_reference(Alias) ->
greply({_To, [[alias | Alias] | _] = Tag}, Reply) when is_reference(Alias) -> greply({_To, [[alias | Alias] | _] = Tag}, Reply) when is_reference(Alias) ->
Alias ! {Tag, Reply}, ok; Alias ! {Tag, Reply}, ok;
greply({To, Tag}, Reply) -> greply({To, Tag}, Reply) ->
try To ! {Tag, Reply}, ok catch _:_ -> ok end.
try To ! {Tag, Reply}, ok catch _:_ -> ok end.
try_greply(false, _Msg) ->
ignore;
try_greply(From, Reply) ->
greply(From, Reply).

+ 2
- 7
src/gen_emm.erl 查看文件

@ -6,7 +6,7 @@
-include_lib("kernel/include/logger.hrl"). -include_lib("kernel/include/logger.hrl").
-import(maps, [iterator/1, next/1]). -import(maps, [iterator/1, next/1]).
-import(gen_call, [gcall/3, gcall/4, greply/2]).
-import(gen_call, [gcall/3, gcall/4, greply/2, try_greply/2]).
-export([ -export([
%% API for gen_emm %% API for gen_emm
@ -533,7 +533,7 @@ doEpmHandle(EpmHers, EpmId, Func, Event, From) ->
maps:remove(EpmId, EpmHers) maps:remove(EpmId, EpmHers)
end; end;
_ -> _ ->
try_reply(From, {error, bad_module}),
try_greply(From, {error, bad_module}),
EpmHers EpmHers
end. end.
@ -691,11 +691,6 @@ epmTerminate(#epmHer{epmM = EpmM, epmS = State} = EpmHer, Args, LastIn, Reason)
reply(From, Reply) -> reply(From, Reply) ->
greply(From, Reply). greply(From, Reply).
try_reply(false, _Msg) ->
ignore;
try_reply(From, Reply) ->
greply(From, Reply).
terminate_server(Reason, _Parent, _ServerName, EpmHers) -> terminate_server(Reason, _Parent, _ServerName, EpmHers) ->
epmStopAll(EpmHers), epmStopAll(EpmHers),
exit(Reason). exit(Reason).

+ 2
- 7
src/gen_ipc.erl 查看文件

@ -6,7 +6,7 @@
-include_lib("kernel/include/logger.hrl"). -include_lib("kernel/include/logger.hrl").
-import(maps, [iterator/1, next/1]). -import(maps, [iterator/1, next/1]).
-import(gen_call, [gcall/3, gcall/4, greply/2]).
-import(gen_call, [gcall/3, gcall/4, greply/2, try_greply/2]).
-export([ -export([
%% API for gen_server or gen_statem behaviour %% API for gen_server or gen_statem behaviour
@ -793,11 +793,6 @@ reply(Replies) when is_list(Replies) ->
reply(From, Reply) -> reply(From, Reply) ->
greply(From, Reply). greply(From, Reply).
try_reply(false, _Msg) ->
ignore;
try_reply(From, Reply) ->
greply(From, Reply).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% API helpers end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% API helpers end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% gen_event start %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% gen_event start %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
epmRequest({global, Name}, Msg) -> epmRequest({global, Name}, Msg) ->
@ -980,7 +975,7 @@ doEpmHandle(EpmHers, EpmHandler, Func, Event, From) ->
{NewEpmHers, false} {NewEpmHers, false}
end; end;
_ -> _ ->
try_reply(From, {error, bad_module}),
try_greply(From, {error, bad_module}),
{EpmHers, false} {EpmHers, false}
end. end.

+ 9
- 1
src/gen_mpp.erl 查看文件

@ -5,7 +5,7 @@
-include_lib("kernel/include/logger.hrl"). -include_lib("kernel/include/logger.hrl").
-import(gen_call, [gcall/3, gcall/4, greply/2]).
-import(gen_call, [gcall/3, gcall/4, greply/2, try_greply/2]).
-export([ -export([
%% API for gen_mpp %% API for gen_mpp
@ -740,6 +740,9 @@ matchCallMsg(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurStat
catch catch
throw:Result -> throw:Result ->
handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, From, false); handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, From, false);
error:undef ->
try_greply(From, {error, undef}),
receiveIng(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, false);
Class:Reason:Strace -> Class:Reason:Strace ->
terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {{call, From}, Request}) terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {{call, From}, Request})
end. end.
@ -760,6 +763,8 @@ matchCastMsg(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurStat
catch catch
throw:Result -> throw:Result ->
handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, false, false); handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, false, false);
error:undef ->
receiveIng(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, false);
Class:Reason:Strace -> Class:Reason:Strace ->
terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {cast, Cast}) terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {cast, Cast})
end. end.
@ -780,6 +785,9 @@ matchMFA(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, F
catch catch
throw:Result -> throw:Result ->
handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, From, true); handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, From, true);
error:undef ->
try_greply(From, {error, undef}),
receiveIng(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, false);
Class:Reason:Strace -> Class:Reason:Strace ->
terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {mfa, MFA}) terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {mfa, MFA})
end. end.

+ 8
- 6
src/gen_srv.erl 查看文件

@ -5,7 +5,7 @@
-include_lib("kernel/include/logger.hrl"). -include_lib("kernel/include/logger.hrl").
-import(gen_call, [gcall/3, gcall/4, greply/2]).
-import(gen_call, [gcall/3, gcall/4, greply/2, try_greply/2]).
-export([ -export([
%% API for gen_srv %% API for gen_srv
@ -238,7 +238,6 @@ init_it(Starter, Parent, ServerRef, Module, Args, Options) ->
exit(Error) exit(Error)
end. end.
%%----------------------------------------------------------------- %%-----------------------------------------------------------------
%% enter_loop(Module, Options, State, <ServerName>, <TimeOut>) ->_ %% enter_loop(Module, Options, State, <ServerName>, <TimeOut>) ->_
%% %%
@ -776,6 +775,9 @@ matchMFA(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, F
catch catch
throw:Result -> throw:Result ->
handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, From, true); handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, From, true);
error:undef ->
try_greply(From, {error, undef}),
receiveIng(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, false);
Class:Reason:Strace -> Class:Reason:Strace ->
terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {mfa, MFA}) terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {mfa, MFA})
end. end.
@ -809,13 +811,13 @@ handleCR(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, R
kpS -> kpS ->
receiveIng(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, false); receiveIng(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, false);
{reply, Reply} -> {reply, Reply} ->
reply(From, Reply),
greply(From, Reply),
NewDebug = ?SYS_DEBUG(Debug, Name, {out, Reply, From, CurState}), NewDebug = ?SYS_DEBUG(Debug, Name, {out, Reply, From, CurState}),
receiveIng(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, false); receiveIng(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, false);
{noreply, NewState} -> {noreply, NewState} ->
receiveIng(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, NewState, false); receiveIng(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, NewState, false);
{reply, Reply, NewState} -> {reply, Reply, NewState} ->
reply(From, Reply),
greply(From, Reply),
NewDebug = ?SYS_DEBUG(Debug, Name, {out, Reply, From, NewState}), NewDebug = ?SYS_DEBUG(Debug, Name, {out, Reply, From, NewState}),
receiveIng(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, NewState, false); receiveIng(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, NewState, false);
{noreply, NewState, Actions} -> {noreply, NewState, Actions} ->
@ -823,7 +825,7 @@ handleCR(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, R
{stop, Reason, NewState} -> {stop, Reason, NewState} ->
terminate(exit, Reason, ?STACKTRACE(), Name, Module, Debug, Timers, NewState, {return, stop}); terminate(exit, Reason, ?STACKTRACE(), Name, Module, Debug, Timers, NewState, {return, stop});
{reply, Reply, NewState, Actions} -> {reply, Reply, NewState, Actions} ->
reply(From, Reply),
greply(From, Reply),
NewDebug = ?SYS_DEBUG(Debug, Name, {out, Reply, From, NewState}), NewDebug = ?SYS_DEBUG(Debug, Name, {out, Reply, From, NewState}),
loopEntry(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, NewState, listify(Actions)); loopEntry(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, NewState, listify(Actions));
{stopReply, Reason, Reply, NewState} -> {stopReply, Reason, Reply, NewState} ->
@ -831,7 +833,7 @@ handleCR(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, R
try try
terminate(exit, Reason, ?STACKTRACE(), Name, Module, NewDebug, Timers, NewState, {return, stop_reply}) terminate(exit, Reason, ?STACKTRACE(), Name, Module, NewDebug, Timers, NewState, {return, stop_reply})
after after
_ = reply(From, Reply)
_ = greply(From, Reply)
end; end;
_AnyRet -> _AnyRet ->
case IsAnyRet of case IsAnyRet of

Loading…
取消
儲存