diff options
| author | Alvaro Videla <videlalvaro@gmail.com> | 2015-12-23 15:09:11 +0100 |
|---|---|---|
| committer | Alvaro Videla <videlalvaro@gmail.com> | 2015-12-23 15:09:11 +0100 |
| commit | b6d63de19d0539ddc20221adae0161756f32e7c4 (patch) | |
| tree | 4d5936f191efd18facb98b444799a597661a0a24 | |
| parent | 3d478460a3d9a94160e89ee82b85eb15ec5102a1 (diff) | |
| parent | c6d9719bb2db4ed38a340d7ecb981075b291f918 (diff) | |
| download | rabbitmq-server-git-b6d63de19d0539ddc20221adae0161756f32e7c4.tar.gz | |
Merge pull request #513 from javaforfun/lazy_purge
purge may crash in lazy queue(3.6.0)
| -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, |
