Fix repair-is-finished-but-message-not-consumed DoS during peer SIGSTOP

This commit is contained in:
Scott Lystig Fritchie 2016-02-22 16:48:02 +09:00
parent 53ce6d89dd
commit 1d8bc19891

View file

@ -390,6 +390,7 @@ handle_cast(_Cast, S) ->
handle_info(tick_check_environment, #ch_mgr{ignore_timer=true}=S) -> handle_info(tick_check_environment, #ch_mgr{ignore_timer=true}=S) ->
{noreply, S}; {noreply, S};
handle_info(tick_check_environment, S) -> handle_info(tick_check_environment, S) ->
gobble_ticks(),
{{_Delta, Props, _Epoch}, S1} = do_react_to_env(S), {{_Delta, Props, _Epoch}, S1} = do_react_to_env(S),
S2 = sanitize_repair_state(S1), S2 = sanitize_repair_state(S1),
S3 = perhaps_start_repair(S2), S3 = perhaps_start_repair(S2),
@ -2538,6 +2539,14 @@ gobble_calls(StaticCall) ->
ok ok
end. end.
gobble_ticks() ->
receive
tick_check_environment ->
gobble_ticks()
after 0 ->
ok
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
perhaps_start_repair(#ch_mgr{name=MyName, perhaps_start_repair(#ch_mgr{name=MyName,