diff options
| author | shawnsli <lishuaihenu@gmail.com> | 2015-12-23 21:01:32 +0800 |
|---|---|---|
| committer | Alvaro Videla <videlalvaro@gmail.com> | 2015-12-23 15:51:55 +0100 |
| commit | 447e549860d6281b12bd9cbb2d11f04e741561aa (patch) | |
| tree | 40c628084312e8d3f5e93bd0d2a75f713aae5843 /src | |
| parent | 5d617bac4006a2f605a263db2a1f4817fef3305b (diff) | |
| download | rabbitmq-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.erl | 12 |
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, |
