From 44d53ecb332aafa1fa8f0d7dc94e8329621d2d5e Mon Sep 17 00:00:00 2001 From: zhouzb Date: Fri, 23 Aug 2019 13:48:17 +0800 Subject: [PATCH] Update emqx_channel.erl --- src/emqx_channel.erl | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/emqx_channel.erl b/src/emqx_channel.erl index 38e3513cb..fc64ba71c 100644 --- a/src/emqx_channel.erl +++ b/src/emqx_channel.erl @@ -328,25 +328,21 @@ handle_in(?PACKET(?PINGREQ), Channel) -> handle_in(?DISCONNECT_PACKET(RC, Properties), Channel = #channel{session = Session, protocol = Protocol}) -> OldInterval = emqx_session:info(expiry_interval, Session), - Interval = maps:get('Session-Expiry-Interval', case Properties of - undefined -> #{}; - _ -> Properties - end, OldInterval), + Interval = get_property('Session-Expiry-Interval', Properties, OldInterval), case OldInterval =:= 0 andalso Interval =/= OldInterval of true -> handle_out({disconnect, ?RC_PROTOCOL_ERROR}, Channel); false -> - NChannel = ensure_disconnected(case RC of - ?RC_SUCCESS -> - Channel#channel{protocol = emqx_protocol:clear_will_msg(Protocol), - session = emqx_session:update_expiry_interval(Interval, Session)}; - _ -> Channel#channel{session = emqx_session:update_expiry_interval(Interval, Session)} - end), + Channel1 = case RC of + ?RC_SUCCESS -> Channel#channel{protocol = emqx_protocol:clear_will_msg(Protocol)}; + _ -> Channel + end, + Channel2 = ensure_disconnected(Channel1#channel{session = emqx_session:update_expiry_interval(Interval, Session)}), case Interval of ?UINT_MAX -> - {ok, ensure_timer(will_timer, NChannel)}; + {ok, ensure_timer(will_timer, Channel2)}; Int when Int > 0 -> - {ok, ensure_timer([will_timer, expire_timer], NChannel)}; + {ok, ensure_timer([will_timer, expire_timer], Channel2)}; _Other -> Reason = case RC of ?RC_SUCCESS -> normal; @@ -354,7 +350,7 @@ handle_in(?DISCONNECT_PACKET(RC, Properties), Channel = #channel{session = Sessi Ver = emqx_protocol:info(proto_ver, Protocol), emqx_reason_codes:name(RC, Ver) end, - {stop, {shutdown, Reason}, NChannel} + {stop, {shutdown, Reason}, Channel2} end end;