diff --git a/src/gen_emm.erl b/src/gen_emm.erl index 8eb40a9..7f19411 100644 --- a/src/gen_emm.erl +++ b/src/gen_emm.erl @@ -287,8 +287,8 @@ epmRpc(EpmSrv, Cmd) -> try gen:call(EpmSrv, '$epm_call', Cmd, infinity) of {ok, Reply} -> Reply - catch Class:Reason -> - erlang:raise(Class, {Reason, {?MODULE, call, [EpmSrv, Cmd, infinity]}}, ?STACKTRACE()) + catch Class:Reason:S -> + erlang:raise(Class, {Reason, {?MODULE, call, [EpmSrv, Cmd, infinity]}}, S) end. epmRpc(EpmSrv, Cmd, Timeout) -> @@ -327,9 +327,9 @@ receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, IsHib) -> sys:handle_system_msg(Req, From, Parent, ?MODULE, Debug, {ServerName, HibernateAfterTimeout, EpmHers, IsHib}, IsHib); {'EXIT', Parent, Reason} -> terminate_server(Reason, Parent, ServerName, EpmHers); - {'$gen_call', From, Request} -> + {'$epm_call', From, Request} -> epmCallMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, From, Request); - {'$gen_info', CmdOrEmpHandler, Event} -> + {'$epm_info', CmdOrEmpHandler, Event} -> epmInfoMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, CmdOrEmpHandler, Event); Msg -> handleMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, Msg) @@ -395,7 +395,7 @@ handleMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, Msg) -> NewDebug = ?SYS_DEBUG(Debug, ServerName, {in, Msg}), case Msg of {'EXIT', From, Reason} -> - NewEpmHers = epmStopOne(EpmHers, From, Reason), + NewEpmHers = epmStopOne(From, EpmHers, Reason), receiveIng(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, false); {_From, Tag, stop} -> try terminate_server(normal, Parent, ServerName, EpmHers) @@ -405,8 +405,11 @@ handleMsg(Parent, ServerName, HibernateAfterTimeout, EpmHers, Debug, Msg) -> {_From, Tag, get_modules} -> reply(Tag, get_modules(EpmHers)), receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, NewDebug, false); + {_From, Tag, which_handlers} -> + reply(Tag, maps:keys(EpmHers)), + receiveIng(Parent, ServerName, HibernateAfterTimeout, EpmHers, NewDebug, false); _ -> - {NewEpmHers, IsHib} = doNotify(EpmHers, handleInfo, EpmHers, false), + {NewEpmHers, IsHib} = doNotify(EpmHers, handleInfo, Msg, false), loopEntry(Parent, ServerName, HibernateAfterTimeout, NewEpmHers, NewDebug, IsHib) end. @@ -514,9 +517,9 @@ doEpmHandle(EpmHers, EpmId, Func, Event, From) -> catch throw:Ret -> handleEpmCR(Ret, EpmHers, EpmId, EpmHer, Event, From); - C:R -> - epmTerminate(EpmHer, {error, {C, R, ?STACKTRACE()}}, Event, crash), - maps:remove(EpmId, EpmHer) + C:R:S -> + epmTerminate(EpmHer, {error, {C, R, S}}, Event, crash), + maps:remove(EpmId, EpmHers) end; _ -> try_reply(From, {error, bad_module}), diff --git a/src/gen_ipc.erl b/src/gen_ipc.erl index f077356..6c5f60f 100644 --- a/src/gen_ipc.erl +++ b/src/gen_ipc.erl @@ -1014,7 +1014,7 @@ doEpmHandle(EpmHers, EpmHandler, Func, Event, From) -> handleEpmCR(Ret, EpmHers, EpmHer, Event, From); C:R -> epmTerminate(EpmHer, {error, {C, R, ?STACKTRACE()}}, Event, crash), - NewEpmHers = maps:remove(EpmHandler, EpmHer), + NewEpmHers = maps:remove(EpmHandler, EpmHers), {NewEpmHers, false} end; _ ->