From f9eeab89a2c72b601161bccac36e970341462001 Mon Sep 17 00:00:00 2001 From: Feng Lee Date: Sun, 16 Aug 2015 22:01:04 +0800 Subject: [PATCH] fix gen_server2 issue, https://github.com/rabbitmq/rabbitmq-server/issues/268 --- src/emqttd_retained.erl | 2 +- src/emqttd_session.erl | 1 + src/gen_server2.erl | 9 +++++++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/emqttd_retained.erl b/src/emqttd_retained.erl index adbe82e64..633618557 100644 --- a/src/emqttd_retained.erl +++ b/src/emqttd_retained.erl @@ -122,5 +122,5 @@ dispatch(Topic, CPid) when is_binary(Topic) -> end, mnesia:async_dirty(fun mnesia:foldl/3, [Fun, [], retained]) end, - [CPid ! {dispatch, Msg} || Msg <- Msgs]. + lists:foreach(fun(Msg) -> CPid ! {dispatch, Msg} end, lists:reverse(Msgs)). diff --git a/src/emqttd_session.erl b/src/emqttd_session.erl index 726a83b51..db68b368d 100644 --- a/src/emqttd_session.erl +++ b/src/emqttd_session.erl @@ -268,6 +268,7 @@ prioritise_info(Msg, _Len, _State) -> session_expired -> 10; {timeout, _, _} -> 5; collect_info -> 2; + {dispatch, _} -> 1; _ -> 0 end. diff --git a/src/gen_server2.erl b/src/gen_server2.erl index fd0e6553b..5c04f3f9e 100644 --- a/src/gen_server2.erl +++ b/src/gen_server2.erl @@ -633,8 +633,13 @@ extend_backoff({backoff, InitialTimeout, MinimumTimeout, DesiredHibPeriod}) -> %%% The MAIN loop. %%% --------------------------------------------------- loop(GS2State = #gs2_state { time = hibernate, - timeout_state = undefined }) -> - pre_hibernate(GS2State); + timeout_state = undefined, + queue = Queue }) -> + case priority_queue:is_empty(Queue) of + true -> pre_hibernate(GS2State); + false -> process_next_msg(GS2State) + end; + loop(GS2State) -> process_next_msg(drain(GS2State)).