diff options
author | Michael Klishin <klishinm@vmware.com> | 2021-10-15 16:24:30 +0300 |
---|---|---|
committer | Michael Klishin <michael@clojurewerkz.org> | 2021-10-15 16:25:24 +0300 |
commit | 732e72b0dac1fb06e938e71e5fe3c83d3f48eb5b (patch) | |
tree | 527ee2c3c3e30406743cdc67cbeb1b9ab987cc8b | |
parent | 45a654c9299b7c71ac9fd47de645b3f443ca0820 (diff) | |
download | rabbitmq-server-git-732e72b0dac1fb06e938e71e5fe3c83d3f48eb5b.tar.gz |
Merge pull request #3582 from luos/channel-q-pid-leak-fix-v39x
Fix an Erlang monitor leak when queue churn is high
(cherry picked from commit a78b76afcda60820cf78f16a509b50b8ec32789b)
-rw-r--r-- | deps/rabbit/src/rabbit_channel.erl | 8 | ||||
-rw-r--r-- | deps/rabbit/src/rabbit_queue_type.erl | 2 |
2 files changed, 6 insertions, 4 deletions
diff --git a/deps/rabbit/src/rabbit_channel.erl b/deps/rabbit/src/rabbit_channel.erl index cf4b160fcb..d1059b4cbe 100644 --- a/deps/rabbit/src/rabbit_channel.erl +++ b/deps/rabbit/src/rabbit_channel.erl @@ -817,8 +817,10 @@ handle_info({'DOWN', _MRef, process, QPid, Reason}, State1 = State0#ch{queue_states = QState1}, State = handle_queue_actions(Actions, State1), noreply_coalesce(State); - {eol, QRef} -> - State1 = handle_consuming_queue_down_or_eol(QRef, State0), + {eol, QState1, QRef} -> + State1 = handle_consuming_queue_down_or_eol(QRef, State0#ch{ + queue_states = QState1 + }), {ConfirmMXs, UC1} = rabbit_confirms:remove_queue(QRef, State1#ch.unconfirmed), %% Deleted queue is a special case. @@ -827,7 +829,7 @@ handle_info({'DOWN', _MRef, process, QPid, Reason}, State1#ch{unconfirmed = UC1}), erase_queue_stats(QRef), noreply_coalesce( - State2#ch{queue_states = rabbit_queue_type:remove(QRef, QStates0)}) + State2#ch{queue_states = rabbit_queue_type:remove(QRef, State2#ch.queue_states)}) end; handle_info({'EXIT', _Pid, Reason}, State) -> diff --git a/deps/rabbit/src/rabbit_queue_type.erl b/deps/rabbit/src/rabbit_queue_type.erl index dd405119be..055b637354 100644 --- a/deps/rabbit/src/rabbit_queue_type.erl +++ b/deps/rabbit/src/rabbit_queue_type.erl @@ -398,7 +398,7 @@ handle_down(Pid, Info, #?STATE{monitor_registry = Reg0} = State0) -> {ok, State, Actions} -> {ok, State#?STATE{monitor_registry = Reg}, Actions}; eol -> - {eol, QRef}; + {eol, State0#?STATE{monitor_registry = Reg}, QRef}; Err -> Err end; |