From a15b3889281bc58291dac1fcc07d3e3267debecc Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Sun, 16 May 2021 15:19:01 +0800 Subject: [PATCH] ft: es_gen_ipc.erl sync --- src/sync/es_gen_ipc.erl | 144 ++++++++++++++++++++++------------------ 1 file changed, 80 insertions(+), 64 deletions(-) diff --git a/src/sync/es_gen_ipc.erl b/src/sync/es_gen_ipc.erl index ac8966c..97ae0b6 100644 --- a/src/sync/es_gen_ipc.erl +++ b/src/sync/es_gen_ipc.erl @@ -13,7 +13,7 @@ , cast/2, send/2 , abcast/2, abcast/3 , call/2, call/3 - , send_request/2, wait_response/1, wait_response/2, check_response/2 + , send_request/2, wait_response/1, wait_response/2, receive_response/1, receive_response/2, check_response/2 , multi_call/2, multi_call/3, multi_call/4 , enter_loop/4, enter_loop/5, enter_loop/6 , reply/1, reply/2 @@ -365,7 +365,7 @@ doModuleInit(Module, Args) -> Module:init(Args) catch throw:Ret -> Ret; - Class:Reason -> {'EXIT', Class, Reason, ?STACKTRACE()} + Class:Reason:Stacktrace -> {'EXIT', Class, Reason, Stacktrace} end. init_it(Starter, self, ServerRef, Module, Args, Opts) -> @@ -685,6 +685,14 @@ wait_response(RequestId) -> wait_response(RequestId, Timeout) -> gen:wait_response(RequestId, Timeout). +-spec receive_response(RequestId::serverRef()) -> {reply, Reply::term()} | {error, {term(), serverRef()}}. +receive_response(RequestId) -> + gen:receive_response(RequestId, infinity). + +-spec receive_response(RequestId::requestId(), timeout()) -> {reply, Reply::term()} | 'timeout' | {error, {term(), serverRef()}}. +receive_response(RequestId, Timeout) -> + gen:receive_response(RequestId, Timeout). + -spec check_response(Msg :: term(), RequestId :: requestId()) -> {reply, Reply :: term()} | 'no_reply' | {error, {term(), serverRef()}}. check_response(Msg, RequestId) -> @@ -820,6 +828,9 @@ reply(Replies) when is_list(Replies) -> ok. -spec reply(From :: from(), Reply :: term()) -> ok. +reply({_To, [alias|Alias] = Tag}, Reply) -> + Alias ! {Tag, Reply}, + ok; reply({To, Tag}, Reply) -> try To ! {Tag, Reply}, ok @@ -835,6 +846,7 @@ try_reply({To, Ref}, Msg) -> catch _:_ -> ok end. + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% API helpers end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% gen_event start %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% epmRequest({global, Name}, Msg) -> @@ -936,8 +948,8 @@ doAddEpm(EpmHers, {Module, _SubId} = EpmId, Args, EpmSup) -> catch throw:Ret -> addNewEpm(Ret, EpmHers, Module, EpmId, EpmSup); - C:R -> - {{error, {C, R, ?STACKTRACE()}}, EpmHers, false} + C:R:S -> + {{error, {C, R, S}}, EpmHers, false} end end; doAddEpm(EpmHers, Module, Args, EpmSup) -> @@ -951,8 +963,8 @@ doAddEpm(EpmHers, Module, Args, EpmSup) -> catch throw:Ret -> addNewEpm(Ret, EpmHers, Module, Module, EpmSup); - C:R -> - {{error, {C, R, ?STACKTRACE()}}, EpmHers, false} + C:R:S -> + {{error, {C, R, S}}, EpmHers, false} end end. @@ -1011,9 +1023,9 @@ doEpmHandle(EpmHers, EpmHandler, Func, Event, From) -> catch throw:Ret -> handleEpmCR(Ret, EpmHers, EpmHer, Event, From); - C:R -> - epmTerminate(EpmHer, {error, {C, R, ?STACKTRACE()}}, Event, crash), - NewEpmHers = maps:remove(EpmHandler, EpmHer), + C:R:S -> + epmTerminate(EpmHer, {error, {C, R, S}}, Event, crash), + NewEpmHers = maps:remove(EpmHandler, EpmHers), {NewEpmHers, false} end; _ -> @@ -1067,7 +1079,7 @@ report_error(#epmHer{epmId = EpmId, epmM = EpmM}, Reason, State, LastIn) -> handler => {EpmId, EpmM}, name => undefined, last_message => LastIn, - state=> State, + state => State, reason => Reason }, #{ @@ -1210,8 +1222,8 @@ matchCallMsg(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Post catch throw:Result -> handleEventCR(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent], Result, ?CB_FORM_EVENT, From); - Class:Reason -> - terminate(Class, Reason, ?STACKTRACE(), Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent]) + Class:Reason:Strace -> + terminate(Class, Reason, Strace, Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent]) end. matchCastMsg(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, Cast) -> @@ -1223,8 +1235,8 @@ matchCastMsg(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Post catch throw:Result -> handleEventCR(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent], Result, ?CB_FORM_EVENT, false); - Class:Reason -> - terminate(Class, Reason, ?STACKTRACE(), Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent]) + Class:Reason:Strace -> + terminate(Class, Reason, Strace, Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent]) end. matchInfoMsg(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, Msg) -> @@ -1236,8 +1248,8 @@ matchInfoMsg(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Post catch throw:Result -> handleEventCR(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent], Result, ?CB_FORM_EVENT, false); - Class:Reason -> - terminate(Class, Reason, ?STACKTRACE(), Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent]) + Class:Reason:Strace -> + terminate(Class, Reason, Strace, Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent]) end. matchTimeoutMsg(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, TimeoutType, TimeoutMsg) -> @@ -1249,8 +1261,8 @@ matchTimeoutMsg(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, P catch throw:Result -> handleEventCR(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent], Result, ?CB_FORM_EVENT, false); - Class:Reason -> - terminate(Class, Reason, ?STACKTRACE(), Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent]) + Class:Reason:Strace -> + terminate(Class, Reason, Strace, Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [CurEvent]) end. matchEpmCallMsg(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, From, Request) -> @@ -1308,8 +1320,8 @@ startEpmCall(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Post catch throw:Ret -> handleEventCR(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [Event], Ret, ?CB_FORM_EVENT, false); - Class:Reason -> - terminate(Class, Reason, ?STACKTRACE(), Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [Event]) + Class:Reason:Strace -> + terminate(Class, Reason, Strace, Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, NewDebug, [Event]) end; _ -> receiveIng(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, IsHib) @@ -1322,8 +1334,8 @@ startEnterCall(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Po catch throw:Result -> handleEnterCR(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, PrevStatus, CurState, CurStatus, Debug, LeftEvents, NextEs, IsPos, IsHib, DoAfter, Result); - Class:Reason -> - terminate(Class, Reason, ?STACKTRACE(), Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) + Class:Reason:Strace -> + terminate(Class, Reason, Strace, Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) end. startAfterCall(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents, Args) -> @@ -1333,8 +1345,8 @@ startAfterCall(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Po catch throw:Result -> handleEventCR(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents, Result, ?CB_FORM_AFTER, false); - Class:Reason -> - terminate(Class, Reason, ?STACKTRACE(), Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) + Class:Reason:Strace -> + terminate(Class, Reason, Strace, Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) end. startEventCall(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents, {Type, Content}) -> @@ -1346,8 +1358,8 @@ startEventCall(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Po catch throw:Ret -> handleEventCR(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents, Ret, ?CB_FORM_EVENT, false); - Class:Reason -> - terminate(Class, Reason, ?STACKTRACE(), Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) + Class:Reason:Strace -> + terminate(Class, Reason, Strace, Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) end; 'info' -> try Module:handleInfo(Content, CurStatus, CurState) of @@ -1356,8 +1368,8 @@ startEventCall(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Po catch throw:Ret -> handleEventCR(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents, Ret, ?CB_FORM_EVENT, false); - Class:Reason -> - terminate(Class, Reason, ?STACKTRACE(), Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) + Class:Reason:Strace -> + terminate(Class, Reason, Strace, Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) end; {'call', From} -> try Module:handleCall(Content, CurStatus, CurState, From) of @@ -1366,8 +1378,8 @@ startEventCall(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Po catch throw:Ret -> handleEventCR(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents, Ret, ?CB_FORM_EVENT, From); - Class:Reason -> - terminate(Class, Reason, ?STACKTRACE(), Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) + Class:Reason:Strace -> + terminate(Class, Reason, Strace, Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) end; _ -> try Module:handleOnevent(Type, Content, CurStatus, CurState) of @@ -1376,8 +1388,8 @@ startEventCall(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Po catch throw:Ret -> handleEventCR(Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents, Ret, ?CB_FORM_EVENT, false); - Class:Reason -> - terminate(Class, Reason, ?STACKTRACE(), Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) + Class:Reason:Strace -> + terminate(Class, Reason, Strace, Parent, Name, Module, HibernateAfterTimeout, IsEnter, EpmHers, Postponed, Timers, CurStatus, CurState, Debug, LeftEvents) end end. @@ -2124,15 +2136,17 @@ format_log(Report) -> limit_report(Report, unlimited) -> Report; limit_report( - #{label:={es_gen_ipc, terminate}, - queue:=Q, - postponed:=Postponed, - module:=Module, - status:=FmtData, - timeouts:=Timeouts, - log:=Log, - reason:={Class, Reason, Stacktrace}, - client_info:=ClientInfo} = Report, + #{ + label := {es_gen_ipc, terminate}, + queue := Q, + postponed := Postponed, + module := Module, + status := FmtData, + timeouts := Timeouts, + log := Log, + reason := {Class, Reason, Stacktrace}, + client_info := ClientInfo + } = Report, Depth) -> Report#{ queue => @@ -2181,25 +2195,26 @@ format_log(Report, FormatOpts0) -> FormatOpts = maps:merge(Default, FormatOpts0), IoOpts = case FormatOpts of - #{chars_limit:=unlimited} -> []; - #{chars_limit:=Limit} -> [{chars_limit, Limit}] + #{chars_limit := unlimited} -> []; + #{chars_limit := Limit} -> [{chars_limit, Limit}] end, {Format, Args} = format_log_single(Report, FormatOpts), io_lib:format(Format, Args, IoOpts). format_log_single( #{ - label:={es_gen_ipc, terminate}, - name:=Name, - queue:=Q, + label := {es_gen_ipc, terminate}, + name := Name, + queue := Q, %% postponed %% isEnter - status:=FmtData, + status := FmtData, %% timeouts - log:=Log, - reason:={Class, Reason, Stacktrace}, - client_info:=ClientInfo}, - #{single_line:=true, depth:=Depth} = FormatOpts) -> + log := Log, + reason := {Class, Reason, Stacktrace}, + client_info := ClientInfo + }, + #{single_line := true, depth := Depth} = FormatOpts) -> P = p(FormatOpts), {FixedReason, FixedStacktrace} = fix_reason(Class, Reason, Stacktrace), {ClientFmt, ClientArgs} = format_client_log_single(ClientInfo, P, Depth), @@ -2249,18 +2264,19 @@ format_log_single(Report, FormatOpts) -> format_log_multi( #{ - label:={es_gen_ipc, terminate}, - name:=Name, - queue:=Q, - postponed:=Postponed, - module:=Module, - isEnter:=StateEnter, - status:=FmtData, - timeouts:=Timeouts, - log:=Log, - reason:={Class, Reason, Stacktrace}, - client_info:=ClientInfo}, - #{depth:=Depth} = FormatOpts) -> + label := {es_gen_ipc, terminate}, + name := Name, + queue := Q, + postponed := Postponed, + module := Module, + isEnter := StateEnter, + status := FmtData, + timeouts := Timeouts, + log := Log, + reason := {Class, Reason, Stacktrace}, + client_info := ClientInfo + }, + #{depth := Depth} = FormatOpts) -> P = p(FormatOpts), {FixedReason, FixedStacktrace} = fix_reason(Class, Reason, Stacktrace), {ClientFmt, ClientArgs} = format_client_log(ClientInfo, P, Depth), @@ -2403,7 +2419,7 @@ format_client_log({_Pid, {Name, Stacktrace}}, P, Depth) -> end, {Format, Args}. -p(#{single_line:=Single, depth:=Depth, encoding:=Enc}) -> +p(#{single_line := Single, depth := Depth, encoding := Enc}) -> "~" ++ single(Single) ++ mod(Enc) ++ p(Depth); p(unlimited) -> "p";