]> granicus.if.org Git - ejabberd/commitdiff
Fix session table cleanup
authorAlexey Shchepin <alexey@process-one.net>
Thu, 30 Nov 2017 10:31:23 +0000 (13:31 +0300)
committerAlexey Shchepin <alexey@process-one.net>
Thu, 30 Nov 2017 10:31:23 +0000 (13:31 +0300)
src/ejabberd_sm_mnesia.erl

index 99e53fa12e704dedd9f193b6e2d4cff54aa00280..b96d27f04460b77e6b576e0f25c7c201a489191b 100644 (file)
@@ -111,12 +111,18 @@ handle_cast(_Msg, State) ->
     {noreply, State}.
 
 handle_info({mnesia_system_event, {mnesia_down, Node}}, State) ->
-    ets:select_delete(
-      session,
-      ets:fun2ms(
-       fun(#session{sid = {_, Pid}}) ->
-               node(Pid) == Node
-       end)),
+    Sessions =
+        ets:select(
+          session,
+          ets:fun2ms(
+            fun(#session{sid = {_, Pid}} = S)
+               when node(Pid) == Node ->
+                    S
+            end)),
+    lists:foreach(
+      fun(S) ->
+              mnesia:dirty_delete_object(S)
+      end, Sessions),
     {noreply, State};
 handle_info(_Info, State) ->
     {noreply, State}.