diff --git a/src/gen_ipc.erl b/src/gen_ipc.erl index 06b237d..ac15c9a 100644 --- a/src/gen_ipc.erl +++ b/src/gen_ipc.erl @@ -1835,25 +1835,25 @@ list_timeouts(Timers) -> %% 状态转换已完成,如果有排队事件,则继续循环,否则获取新事件 performEvents(CycleData, CurStatus, CurState, Debug, LeftEvents, IsHibernate, DoAfter) -> % io:format("loop_done: status_data = ~p ~n postponed = ~p LeftEvents = ~p ~n timers = ~p.~n", [S#status.status_data,,S#status.postponed,LeftEvents,S#status.timers]), - case LeftEvents of - [] -> - case DoAfter of - {true, Args} -> - %% 这里 IsHibernate设置会被丢弃 按照gen_server中的设计 continue 和 hiernate是互斥的 - startAfterCall(CycleData, CurStatus, CurState, Debug, LeftEvents, Args); - _ -> - reLoopEntry(CycleData, CurStatus, CurState, Debug, IsHibernate) - end; - [Event | _Events] -> - %% 循环直到没有排队事件 - if - IsHibernate -> - %% _ = garbage_collect(), - erts_internal:garbage_collect(major); - true -> - ignore - end, - startEventCall(CycleData, CurStatus, CurState, Debug, LeftEvents, Event) + case DoAfter of + {true, Args} -> + %% 这里 IsHibernate设置会被丢弃 按照gen_server中的设计 continue 和 hiernate是互斥的 + startAfterCall(CycleData, CurStatus, CurState, Debug, LeftEvents, Args); + _ -> + case LeftEvents of + [] -> + reLoopEntry(CycleData, CurStatus, CurState, Debug, IsHibernate); + [Event | _Events] -> + %% 循环直到没有排队事件 + if + IsHibernate -> + %% _ = garbage_collect(), + erts_internal:garbage_collect(major); + true -> + ignore + end, + startEventCall(CycleData, CurStatus, CurState, Debug, LeftEvents, Event) + end end. doReplies([], Debug) ->