]> granicus.if.org Git - ejabberd/commitdiff
Appropriately abort pubsub transaction
authorEvgeny Khramtsov <ekhramtsov@process-one.net>
Mon, 29 Jul 2019 18:44:30 +0000 (21:44 +0300)
committerEvgeny Khramtsov <ekhramtsov@process-one.net>
Mon, 29 Jul 2019 18:44:30 +0000 (21:44 +0300)
src/mod_pubsub.erl

index 8dbe9cb983ddb004154e12cc35b98e8c5874ae6e..464668874a12fe950a563b80d9d251be6d0397d4 100644 (file)
@@ -3806,9 +3806,15 @@ transaction(Host, Fun, Trans) ->
 do_transaction(ServerHost, Fun, Trans, DBType) ->
     F = fun() ->
                try Fun()
-               catch ?EX_RULE(Class, Reason, St) ->
+               catch ?EX_RULE(Class, Reason, St) when (DBType == mnesia andalso
+                                                       Trans == transaction) orelse
+                                                      DBType == sql ->
                        StackTrace = ?EX_STACK(St),
-                       mnesia:abort({exception, Class, Reason, StackTrace})
+                       Ex = {exception, Class, Reason, StackTrace},
+                       case DBType of
+                           mnesia -> mnesia:abort(Ex);
+                           sql -> ejabberd_sql:abort(Ex)
+                       end
                end
        end,
     Res = case DBType of