diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2014-03-13 19:25:59 +0000 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2014-03-13 19:25:59 +0000 |
commit | f7a717c1df0e5d811305e6b054811f8d514a5272 (patch) | |
tree | 25ab5cbc5550bee3d06882883fe0abadc1bfd6a2 /src/rabbit_msg_store.erl | |
parent | 4af7804b122b33a034c6d390a4fbb5fd4c73b9db (diff) | |
download | rabbitmq-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'.
Diffstat (limited to 'src/rabbit_msg_store.erl')
-rw-r--r-- | src/rabbit_msg_store.erl | 12 |
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, |