]> granicus.if.org Git - ejabberd/commitdiff
fixing pubsub_subscription issue when changed transaction to sync_dirty
authorChristophe Romain <christophe.romain@process-one.net>
Thu, 20 Aug 2009 13:07:58 +0000 (13:07 +0000)
committerChristophe Romain <christophe.romain@process-one.net>
Thu, 20 Aug 2009 13:07:58 +0000 (13:07 +0000)
SVN Revision: 2508

src/mod_pubsub/mod_pubsub.erl
src/mod_pubsub/pubsub_subscription.erl

index fe0149decc3b759de1c2ab7cca00c0cbb901b439..d24b0a407a8babd88df4607c4d55ab992e79efcb 100644 (file)
@@ -2952,8 +2952,10 @@ get_node_subs(#pubsub_node{type   = Type,
 
 get_options_for_subs(_Host, Node, NodeID, Subs) ->
     lists:foldl(fun({JID, subscribed, SubID}, Acc) ->
-                       {result, #pubsub_subscription{options = Options}} = pubsub_subscription:get_subscription(JID, NodeID, SubID),
-                       [{JID, Node, Options} | Acc];
+                       case pubsub_subscription:get_subscription(JID, NodeID, SubID) of
+                           {result, #pubsub_subscription{options = Options}} -> [{JID, Node, Options} | Acc];
+                           _ -> Acc
+                       end;
                    (_, Acc) ->
                        Acc
                end, [], Subs).
index 5f3038d35d38f651e9bb4fe3dce37c15bf7e89f6..e41acc518055522375a3f2078b325239eca030f9 100644 (file)
@@ -92,31 +92,31 @@ init() ->
     ok = create_table().
 
 subscribe_node(JID, NodeID, Options) ->
-    case mnesia:sync_dirty(fun add_subscription/3,
+    case catch mnesia:sync_dirty(fun add_subscription/3,
                            [JID, NodeID, Options]) of
-       {atomic, Result} -> {result, Result};
-       {aborted, Error} -> Error
+       {'EXIT', {aborted, Error}} -> Error;
+       Result -> {result, Result}
     end.
 
 unsubscribe_node(JID, NodeID, SubID) ->
-    case mnesia:sync_dirty(fun delete_subscription/3,
+    case catch mnesia:sync_dirty(fun delete_subscription/3,
                            [JID, NodeID, SubID]) of
-       {atomic, Result} -> {result, Result};
-       {aborted, Error} -> Error
+       {'EXIT', {aborted, Error}} -> Error;
+       Result -> {result, Result}
     end.
 
 get_subscription(JID, NodeID, SubID) ->
-    case mnesia:sync_dirty(fun read_subscription/3,
+    case catch mnesia:sync_dirty(fun read_subscription/3,
                            [JID, NodeID, SubID]) of
-       {atomic, Result} -> {result, Result};
-       {aborted, Error} -> Error
+       {'EXIT', {aborted, Error}} -> Error;
+       Result -> {result, Result}
     end.
 
 set_subscription(JID, NodeID, SubID, Options) ->
-    case mnesia:sync_dirty(fun write_subscription/4,
+    case catch mnesia:sync_dirty(fun write_subscription/4,
                            [JID, NodeID, SubID, Options]) of
-       {atomic, Result} -> {result, Result};
-       {aborted, Error} -> Error
+       {'EXIT', {aborted, Error}} -> Error;
+       Result -> {result, Result}
     end.
 
 get_options_xform(Lang, Options) ->