|
|
@ -384,9 +384,6 @@ clfs(ServerRef, M, F, A, Timeout) -> |
|
|
|
erlang:raise(Class, {Reason, {?MODULE, clfs, [ServerRef, {M, F, A}]}}, ?STACKTRACE()) |
|
|
|
end. |
|
|
|
|
|
|
|
csfs(ServerRef, M, F, A) -> |
|
|
|
csfs(ServerRef, {'$gen_csfs', {M, F, A}}). |
|
|
|
|
|
|
|
-spec csfn(ServerRef :: serverRef(), Msg :: term()) -> ok. |
|
|
|
csfn({global, Name}, M, F, A) -> |
|
|
|
try global:send(Name, {'$gen_csfn', {M, F, A}}), |
|
|
@ -726,10 +723,14 @@ receiveIng(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, |
|
|
|
matchCallMsg(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, From, Request); |
|
|
|
{'$gen_cast', Cast} -> |
|
|
|
matchCastMsg(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, Cast); |
|
|
|
|
|
|
|
{'$gen_cast', Cast} -> |
|
|
|
matchCastMsg(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, Cast); |
|
|
|
|
|
|
|
{'gen_clfn', MFA} -> |
|
|
|
matchMFA(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, MFA, false); |
|
|
|
{'gen_clfs', MFA} -> |
|
|
|
matchMFA(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, MFA, true); |
|
|
|
{'gen_csfn', MFA} -> |
|
|
|
matchMFA(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, MFA, false); |
|
|
|
{'gen_csfs', MFA} -> |
|
|
|
matchMFA(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, MFA, true); |
|
|
|
{timeout, TimerRef, TimeoutName} -> |
|
|
|
case Timers of |
|
|
|
#{TimeoutName := {TimerRef, TimeoutMsg}} -> |
|
|
@ -790,6 +791,26 @@ matchCastMsg(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurStat |
|
|
|
terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {cast, Cast}) |
|
|
|
end. |
|
|
|
|
|
|
|
matchMFA(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, MFA, IsWithState) -> |
|
|
|
NewDebug = ?SYS_DEBUG(Debug, Name, {in, {mfa, MFA}}), |
|
|
|
try |
|
|
|
{M, F, A} = MFA, |
|
|
|
case IsWithState of |
|
|
|
true -> |
|
|
|
erlang:apply(M, F, A ++ [CurState]); |
|
|
|
_ -> |
|
|
|
erlang:apply(M, F, A) |
|
|
|
end |
|
|
|
of |
|
|
|
Result -> |
|
|
|
handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, false) |
|
|
|
catch |
|
|
|
throw:Result -> |
|
|
|
handleCR(Parent, Name, Module, HibernateAfterTimeout, NewDebug, Timers, CurState, Result, false); |
|
|
|
Class:Reason:Strace -> |
|
|
|
terminate(Class, Reason, Strace, Name, Module, NewDebug, Timers, CurState, {mfa, MFA}) |
|
|
|
end. |
|
|
|
|
|
|
|
matchInfoMsg(Parent, Name, Module, HibernateAfterTimeout, Debug, Timers, CurState, Msg) -> |
|
|
|
NewDebug = ?SYS_DEBUG(Debug, Name, {in, {info, Msg}}), |
|
|
|
try Module:handleInfo(Msg, CurState) of |
|
|
|