diff --git a/src/emqttd_protocol.erl b/src/emqttd_protocol.erl index e892c6158..f0b877dc5 100644 --- a/src/emqttd_protocol.erl +++ b/src/emqttd_protocol.erl @@ -130,9 +130,12 @@ handle({subscribe, RawTopicTable}, ProtoState = #proto_state{client_id = ClientI handle({unsubscribe, RawTopics}, ProtoState = #proto_state{client_id = ClientId, username = Username, session = Session}) -> - {ok, TopicTable} = emqttd:run_hooks('client.unsubscribe', - [ClientId, Username], parse_topics(RawTopics)), - emqttd_session:unsubscribe(Session, TopicTable), + case emqttd:run_hooks('client.unsubscribe', [ClientId, Username], parse_topics(RawTopics)) of + {ok, TopicTable} -> + emqttd_session:unsubscribe(Session, TopicTable); + {stop, _} -> + ok + end, {ok, ProtoState}. process(Packet = ?CONNECT_PACKET(Var), State0) -> @@ -243,8 +246,12 @@ process(?UNSUBSCRIBE_PACKET(PacketId, []), State) -> process(?UNSUBSCRIBE_PACKET(PacketId, RawTopics), State = #proto_state{ client_id = ClientId, username = Username, session = Session}) -> - {ok, TopicTable} = emqttd:run_hooks('client.unsubscribe', [ClientId, Username], parse_topics(RawTopics)), - emqttd_session:unsubscribe(Session, TopicTable), + case emqttd:run_hooks('client.unsubscribe', [ClientId, Username], parse_topics(RawTopics)) of + {ok, TopicTable} -> + emqttd_session:unsubscribe(Session, TopicTable); + {stop, _} -> + ok + end, send(?UNSUBACK_PACKET(PacketId), State); process(?PACKET(?PINGREQ), State) ->