Przeglądaj źródła

remove a transaction

Feng 10 lat temu
rodzic
commit
e08dbf82f6
1 zmienionych plików z 8 dodań i 4 usunięć
  1. 8 4
      src/emqttd_pubsub.erl

+ 8 - 4
src/emqttd_pubsub.erl

@@ -212,8 +212,7 @@ code_change(_OldVsn, State, _Extra) ->
 add_subscriber_(Topic, SubPid) ->
     case ets:member(subscriber, Topic) of
         false ->
-            mnesia:transaction(fun add_topic_/1, [Topic]),
-            emqttd_router:add_route(Topic, node()),
+            mnesia:transaction(fun add_topic_route_/2, [Topic, node()]),
             setstats(topic);
         true ->
             ok
@@ -224,13 +223,15 @@ del_subscriber_(Topic, SubPid) ->
     ets:delete_object(subscriber, {Topic, SubPid}),
     case ets:lookup(subscriber, Topic) of
         [] ->
-            emqttd_router:del_route(Topic, node()),
-            mnesia:transaction(fun del_topic_/1, [Topic]),
+            mnesia:transaction(fun del_topic_route_/2, [Topic, node()]),
             setstats(topic);
         [_|_] ->
             ok
     end.
 
+add_topic_route_(Topic, Node) ->
+    add_topic_(Topic), emqttd_router:add_route(Topic, Node).
+
 add_topic_(Topic) ->
     add_topic_(Topic, []).
 
@@ -241,6 +242,9 @@ add_topic_(Topic, Flags) ->
         [_] -> ok
     end.
 
+del_topic_route_(Topic, Node) ->
+    emqttd_router:del_route(Topic, Node), del_topic_(Topic).
+
 del_topic_(Topic) ->
     case emqttd_router:has_route(Topic) of
         true  -> ok;