From 14771cdaeea6085bc134f3d8e231c55afa977819 Mon Sep 17 00:00:00 2001 From: Feng Lee Date: Mon, 20 Nov 2017 10:10:32 +0800 Subject: [PATCH] Fix issue #1340 - erlang:demonitor/1 the reference when erasing the monitor --- src/emqttd_cm.erl | 1 + src/emqttd_sm.erl | 1 + 2 files changed, 2 insertions(+) diff --git a/src/emqttd_cm.erl b/src/emqttd_cm.erl index c5f0ff145..4edc155df 100644 --- a/src/emqttd_cm.erl +++ b/src/emqttd_cm.erl @@ -152,6 +152,7 @@ monitor_client(ClientId, Pid, State = #state{monitors = Monitors}) -> State#state{monitors = dict:store(MRef, {ClientId, Pid}, Monitors)}. erase_monitor(MRef, State = #state{monitors = Monitors}) -> + erlang:demonitor(MRef, [flush]), State#state{monitors = dict:erase(MRef, Monitors)}. setstats(State = #state{statsfun = StatsFun}) -> diff --git a/src/emqttd_sm.erl b/src/emqttd_sm.erl index 8d4c220b2..054e81c95 100644 --- a/src/emqttd_sm.erl +++ b/src/emqttd_sm.erl @@ -310,5 +310,6 @@ monitor_session(ClientId, SessPid, State = #state{monitors = Monitors}) -> State#state{monitors = dict:store(MRef, ClientId, Monitors)}. erase_monitor(MRef, State = #state{monitors = Monitors}) -> + erlang:demonitor(MRef, [flush]), State#state{monitors = dict:erase(MRef, Monitors)}.