瀏覽代碼

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}),
receiveIng(Parent, Name, Module, GbhOpts, HibernateAfterTimeout, Debug, Timers, CurState, false);
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)
end.
@ -1394,7 +1394,7 @@ mod(_) -> "t".
%% Status information
%%-----------------------------------------------------------------
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),
Log = sys:get_log(Debug),
Specific =

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

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

Loading…
取消
儲存