浏览代码

ft: gen_emm.erl 不需要守护模式

master
SisMaker 1年前
父节点
当前提交
b49ad432fc
共有 2 个文件被更改,包括 21 次插入24 次删除
  1. +2
    -2
      src/gen_apu.erl
  2. +19
    -22
      src/gen_emm.erl

+ 2
- 2
src/gen_apu.erl 查看文件

@ -810,7 +810,7 @@ matchMFA(Parent, Name, Module, GbhOpts, HibernateAfterTimeout, Debug, Timers, Cu
try_greply(From, {error, undef}), try_greply(From, {error, undef}),
receiveIng(Parent, Name, Module, GbhOpts, HibernateAfterTimeout, Debug, Timers, CurState, false); receiveIng(Parent, Name, Module, GbhOpts, HibernateAfterTimeout, Debug, Timers, CurState, false);
Class:Reason:Strace -> Class:Reason:Strace ->
try_greply(From, {error, {inner_error, {Class, Reason, Stra ce}}}),
try_greply(From, {error, {inner_error, {Class, Reason, Strace}}}),
innerError(Parent, Name, Module, GbhOpts, HibernateAfterTimeout, Debug, Timers, CurState, {mfa, MFA}, Class, Reason, Strace) innerError(Parent, Name, Module, GbhOpts, HibernateAfterTimeout, Debug, Timers, CurState, {mfa, MFA}, Class, Reason, Strace)
end. end.
@ -1394,7 +1394,7 @@ mod(_) -> "t".
%% Status information %% Status information
%%----------------------------------------------------------------- %%-----------------------------------------------------------------
format_status(Opt, StatusData) -> format_status(Opt, StatusData) ->
[PDict, SysState, Parent, Debug, {Name, Module, _HibernateAfterTimeout, _Timers, CurState, _IsHib}] = StatusData,
[PDict, SysState, Parent, Debug, {Name, Module, _GbhOpts, _HibernateAfterTimeout, _Timers, CurState, _IsHib}] = StatusData,
Header = gen:format_status_header("Status for generic server", Name), Header = gen:format_status_header("Status for generic server", Name),
Log = sys:get_log(Debug), Log = sys:get_log(Debug),
Specific = Specific =

+ 19
- 22
src/gen_emm.erl 查看文件

@ -86,7 +86,6 @@
{'logfile', string()}. {'logfile', string()}.
-type startOpt() :: -type startOpt() ::
daemon |
{'timeout', timeout()} | {'timeout', timeout()} |
{'debug', [debug_flag()]} | {'debug', [debug_flag()]} |
{'spawn_opt', [proc_lib:start_spawn_option()]} | {'spawn_opt', [proc_lib:start_spawn_option()]} |
@ -210,8 +209,6 @@ init_it(Starter, Parent, ServerRef, _, _, Options) ->
process_flag(trap_exit, true), process_flag(trap_exit, true),
Name = gen:name(ServerRef), Name = gen:name(ServerRef),
Debug = gen:debug_options(Name, Options), Debug = gen:debug_options(Name, Options),
IsDaemon = lists:member(daemon, Options),
GbhOpts = #gbhOpts{daemon = IsDaemon},
HibernateAfterTimeout = gen:hibernate_after(Options), HibernateAfterTimeout = gen:hibernate_after(Options),
proc_lib:init_ack(Starter, {ok, self()}), proc_lib:init_ack(Starter, {ok, self()}),
receiveIng(Parent, Name, HibernateAfterTimeout, #{}, Debug, false). receiveIng(Parent, Name, HibernateAfterTimeout, #{}, Debug, false).
@ -340,65 +337,65 @@ receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, IsHib) ->
end. end.
epmCallMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, From, Request) -> epmCallMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, From, Request) ->
NewDebug = ?SYS_DEBUG(Debug, ServerName, {call, From, Request}),
?SYS_DEBUG(Debug, ServerName, {call, From, Request}),
case Request of case Request of
'$which_handlers' -> '$which_handlers' ->
reply(From, maps:keys(EpmHers)), reply(From, maps:keys(EpmHers)),
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, NewDebug, false);
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, false);
{'$addEpm', EpmHandler, Args} -> {'$addEpm', EpmHandler, Args} ->
{Reply, NewEpmHers, IsHib} = doAddEpm(EpmHers, EpmHandler, Args, undefined), {Reply, NewEpmHers, IsHib} = doAddEpm(EpmHers, EpmHandler, Args, undefined),
reply(From, Reply), reply(From, Reply),
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib);
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib);
{'$addSupEpm', EpmHandler, Args, EpmSup} -> {'$addSupEpm', EpmHandler, Args, EpmSup} ->
{Reply, NewEpmHers, IsHib} = doAddSupEpm(EpmHers, EpmHandler, Args, EpmSup), {Reply, NewEpmHers, IsHib} = doAddSupEpm(EpmHers, EpmHandler, Args, EpmSup),
reply(From, Reply), reply(From, Reply),
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib);
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib);
{'$delEpm', EpmHandler, Args} -> {'$delEpm', EpmHandler, Args} ->
{Reply, NewEpmHers} = doDelEpm(EpmHers, EpmHandler, Args), {Reply, NewEpmHers} = doDelEpm(EpmHers, EpmHandler, Args),
reply(From, Reply), reply(From, Reply),
receiveIng(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, false);
receiveIng(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, false);
{'$swapEpm', EpmId1, Args1, EpmId2, Args2} -> {'$swapEpm', EpmId1, Args1, EpmId2, Args2} ->
{Reply, NewEpmHers, IsHib} = doSwapEpm(EpmHers, EpmId1, Args1, EpmId2, Args2), {Reply, NewEpmHers, IsHib} = doSwapEpm(EpmHers, EpmId1, Args1, EpmId2, Args2),
reply(From, Reply), reply(From, Reply),
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib);
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib);
{'$swapSupEpm', EpmId1, Args1, EpmId2, Args2, SupPid} -> {'$swapSupEpm', EpmId1, Args1, EpmId2, Args2, SupPid} ->
{Reply, NewEpmHers, IsHib} = doSwapSupEpm(EpmHers, EpmId1, Args1, EpmId2, Args2, SupPid), {Reply, NewEpmHers, IsHib} = doSwapSupEpm(EpmHers, EpmId1, Args1, EpmId2, Args2, SupPid),
reply(From, Reply), reply(From, Reply),
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib);
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib);
{'$syncNotify', Event} -> {'$syncNotify', Event} ->
{NewEpmHers, IsHib} = doNotify(EpmHers, handleEvent, Event, false), {NewEpmHers, IsHib} = doNotify(EpmHers, handleEvent, Event, false),
reply(From, ok), reply(From, ok),
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib);
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib);
{'$epmCall', EpmHandler, Query} -> {'$epmCall', EpmHandler, Query} ->
case doEpmHandle(EpmHers, EpmHandler, handleCall, Query, From) of case doEpmHandle(EpmHers, EpmHandler, handleCall, Query, From) of
{NewEpmHers, IsHib} -> {NewEpmHers, IsHib} ->
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib);
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib);
NewEpmHers -> NewEpmHers ->
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, false)
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, false)
end end
end. end.
epmInfoMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, CmdOrEmpHandler, Event) -> epmInfoMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, CmdOrEmpHandler, Event) ->
NewDebug = ?SYS_DEBUG(Debug, ServerName, {info, CmdOrEmpHandler, Event}),
?SYS_DEBUG(Debug, ServerName, {info, CmdOrEmpHandler, Event}),
case CmdOrEmpHandler of case CmdOrEmpHandler of
'$infoNotify' -> '$infoNotify' ->
{NewEpmHers, IsHib} = doNotify(EpmHers, handleEvent, Event, false), {NewEpmHers, IsHib} = doNotify(EpmHers, handleEvent, Event, false),
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib);
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib);
EpmHandler -> EpmHandler ->
case doEpmHandle(EpmHers, EpmHandler, handleInfo, Event, false) of case doEpmHandle(EpmHers, EpmHandler, handleInfo, Event, false) of
{NewEpmHers, IsHib} -> {NewEpmHers, IsHib} ->
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib);
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib);
NewEpmHers -> NewEpmHers ->
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, false)
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, false)
end end
end. end.
handleMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, Msg) -> handleMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, Msg) ->
NewDebug = ?SYS_DEBUG(Debug, ServerName, {in, Msg}),
?SYS_DEBUG(Debug, ServerName, {in, Msg}),
case Msg of case Msg of
{'EXIT', From, Reason} -> {'EXIT', From, Reason} ->
NewEpmHers = epmStopOne(From, EpmHers, Reason), NewEpmHers = epmStopOne(From, EpmHers, Reason),
receiveIng(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, false);
receiveIng(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, false);
{_From, Tag, stop} -> {_From, Tag, stop} ->
try terminate_server(normal, Parent, ServerName, EpmHers) try terminate_server(normal, Parent, ServerName, EpmHers)
after after
@ -406,13 +403,13 @@ handleMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, Msg) ->
end; end;
{_From, Tag, get_modules} -> {_From, Tag, get_modules} ->
reply(Tag, get_modules(EpmHers)), reply(Tag, get_modules(EpmHers)),
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, NewDebug, false);
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, false);
{_From, Tag, which_handlers} -> {_From, Tag, which_handlers} ->
reply(Tag, maps:keys(EpmHers)), reply(Tag, maps:keys(EpmHers)),
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, NewDebug, false);
receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, false);
_ -> _ ->
{NewEpmHers, IsHib} = doNotify(EpmHers, handleInfo, Msg, false), {NewEpmHers, IsHib} = doNotify(EpmHers, handleInfo, Msg, false),
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib)
loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, Debug, IsHib)
end. end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

正在加载...
取消
保存