summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2014-03-13 19:25:59 +0000
committerMatthias Radestock <matthias@rabbitmq.com>2014-03-13 19:25:59 +0000
commitf7a717c1df0e5d811305e6b054811f8d514a5272 (patch)
tree25ab5cbc5550bee3d06882883fe0abadc1bfd6a2
parent4af7804b122b33a034c6d390a4fbb5fd4c73b9db (diff)
downloadrabbitmq-server-f7a717c1df0e5d811305e6b054811f8d514a5272.tar.gz
turns out that cleaning up 'clients' in client_terminate is bad
since it breaks clean shutdown/recovery, which relies on the CRefs in 'clients'.
-rw-r--r--src/rabbit_msg_store.erl12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl
index 627335a5..2322f0f9 100644
--- a/src/rabbit_msg_store.erl
+++ b/src/rabbit_msg_store.erl
@@ -641,11 +641,9 @@ client_update_flying(Diff, MsgId, #client_msstate { flying_ets = FlyingEts,
end.
clear_client(CRef, State = #msstate { cref_to_msg_ids = CTM,
- clients = Clients,
- dying_clients = DyingClients }) ->
+ dying_clients = DyingClients }) ->
State #msstate { cref_to_msg_ids = dict:erase(CRef, CTM),
- clients = dict:erase(CRef, Clients),
- dying_clients = sets:del_element(CRef, DyingClients) }.
+ dying_clients = sets:del_element(CRef, DyingClients) }.
%%----------------------------------------------------------------------------
@@ -805,8 +803,10 @@ handle_cast({client_dying, CRef},
noreply(write_message(CRef, <<>>,
State #msstate { dying_clients = DyingClients1 }));
-handle_cast({client_delete, CRef}, State) ->
- noreply(remove_message(CRef, CRef, clear_client(CRef, State)));
+handle_cast({client_delete, CRef},
+ State = #msstate { clients = Clients }) ->
+ State1 = State #msstate { clients = dict:erase(CRef, Clients) },
+ noreply(remove_message(CRef, CRef, clear_client(CRef, State1)));
handle_cast({write, CRef, MsgId, Flow},
State = #msstate { cur_file_cache_ets = CurFileCacheEts,