From 1decab93691f42036d1619411210db9d29e81339 Mon Sep 17 00:00:00 2001 From: terry-xiaoyu <506895667@qq.com> Date: Fri, 20 Sep 2019 21:29:51 +0800 Subject: [PATCH] Fix channel crash before CONNECT --- src/emqx_channel.erl | 2 ++ src/emqx_misc.erl | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/emqx_channel.erl b/src/emqx_channel.erl index 63bb55712..d6d1f88d3 100644 --- a/src/emqx_channel.erl +++ b/src/emqx_channel.erl @@ -831,6 +831,8 @@ will_delay_interval(WillMsg) -> %% Terminate %%-------------------------------------------------------------------- +terminate(_, #channel{connected = undefined}) -> + ok; terminate(normal, #channel{conninfo = ConnInfo, client = ClientInfo}) -> ok = emqx_hooks:run('client.disconnected', [ClientInfo, normal, ConnInfo]); terminate({shutdown, Reason}, #channel{conninfo = ConnInfo, client = ClientInfo}) diff --git a/src/emqx_misc.erl b/src/emqx_misc.erl index 34717c804..5abec7d98 100644 --- a/src/emqx_misc.erl +++ b/src/emqx_misc.erl @@ -17,6 +17,7 @@ -module(emqx_misc). -include("types.hrl"). +-include("logger.hrl"). -export([ merge_opts/2 , maybe_apply/2 @@ -70,7 +71,7 @@ pipeline([], Input, State) -> {ok, Input, State}; pipeline([Fun|More], Input, State) -> - case apply_fun(Fun, Input, State) of + try apply_fun(Fun, Input, State) of ok -> pipeline(More, Input, State); {ok, NState} -> pipeline(More, Input, NState); @@ -80,6 +81,11 @@ pipeline([Fun|More], Input, State) -> {error, Reason, State}; {error, Reason, NState} -> {error, Reason, NState} + catch + Error:Reason:Stacktrace -> + ?LOG("pipeline ~p failed: ~p, stacktrace: ~p", + [{Fun, Input, State}, {Error, Reason}, Stacktrace]), + {error, Reason, State} end. -compile({inline, [apply_fun/3]}).