summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorshawnsli <lishuaihenu@gmail.com>2015-12-23 21:01:32 +0800
committerAlvaro Videla <videlalvaro@gmail.com>2015-12-23 15:51:55 +0100
commit447e549860d6281b12bd9cbb2d11f04e741561aa (patch)
tree40c628084312e8d3f5e93bd0d2a75f713aae5843 /src
parent5d617bac4006a2f605a263db2a1f4817fef3305b (diff)
downloadrabbitmq-server-git-447e549860d6281b12bd9cbb2d11f04e741561aa.tar.gz
purge may crash in lazy queue(3.6.0)
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_variable_queue.erl12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl
index 11e6171acf..eb3e9f5095 100644
--- a/src/rabbit_variable_queue.erl
+++ b/src/rabbit_variable_queue.erl
@@ -1653,10 +1653,16 @@ count_pending_acks(#vqstate { ram_pending_ack = RPA,
qi_pending_ack = QPA }) ->
gb_trees:size(RPA) + gb_trees:size(DPA) + gb_trees:size(QPA).
-purge_betas_and_deltas(DelsAndAcksFun, State = #vqstate { q3 = Q3 }) ->
+purge_betas_and_deltas(DelsAndAcksFun, State = #vqstate { mode = Mode }) ->
+ State0 = #vqstate { q3 = Q3 } =
+ case Mode of
+ lazy -> maybe_deltas_to_betas(DelsAndAcksFun, State);
+ _ -> State
+ end,
+
case ?QUEUE:is_empty(Q3) of
- true -> State;
- false -> State1 = remove_queue_entries(Q3, DelsAndAcksFun, State),
+ true -> State0;
+ false -> State1 = remove_queue_entries(Q3, DelsAndAcksFun, State0),
purge_betas_and_deltas(DelsAndAcksFun,
maybe_deltas_to_betas(
DelsAndAcksFun,