summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlvaro Videla <videlalvaro@gmail.com>2015-08-18 15:32:13 +0200
committerAlvaro Videla <videlalvaro@gmail.com>2015-08-18 15:32:13 +0200
commit85a3027903265e11c829f98667603d45e8e84995 (patch)
treeb19ce4e4d19bbf50a50f02267be7cbf6e73dc059
parent0fe7916899076f90f6ba3e8e73d077b3bd5b6d12 (diff)
parent8c866421e66369c70b2436d5178b4b9afd25df62 (diff)
downloadrabbitmq-server-git-85a3027903265e11c829f98667603d45e8e84995.tar.gz
Merge pull request #269 from erylee/stable
issue #268 - gen_server2 can fail to dispatch messages sent by a process to itself
-rw-r--r--src/gen_server2.erl11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/gen_server2.erl b/src/gen_server2.erl
index fd0e6553b5..ffc075da7f 100644
--- a/src/gen_server2.erl
+++ b/src/gen_server2.erl
@@ -633,8 +633,15 @@ 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)).