diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_sql.erl | 2 | ||||
-rw-r--r-- | src/mod_push.erl | 9 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/ejabberd_sql.erl b/src/ejabberd_sql.erl index c891e7aa8..a02aece4d 100644 --- a/src/ejabberd_sql.erl +++ b/src/ejabberd_sql.erl @@ -524,6 +524,7 @@ outer_transaction(F, NRestarts, _Reason) -> catch ?EX_RULE(throw, {aborted, Reason}, _) when NRestarts > 0 -> sql_query_internal([<<"rollback;">>]), + put(?NESTING_KEY, ?TOP_LEVEL_TXN), outer_transaction(F, NRestarts - 1, Reason); ?EX_RULE(throw, {aborted, Reason}, Stack) when NRestarts =:= 0 -> ?ERROR_MSG("SQL transaction restarts exceeded~n** " @@ -610,6 +611,7 @@ sql_query_internal(#sql_query{} = Query) -> check_error(Res, Query); sql_query_internal(F) when is_function(F) -> case catch execute_fun(F) of + {aborted, Reason} -> {error, Reason}; {'EXIT', Reason} -> {error, Reason}; Res -> Res end; diff --git a/src/mod_push.erl b/src/mod_push.erl index a6e871375..2cf34f65f 100644 --- a/src/mod_push.erl +++ b/src/mod_push.erl @@ -682,8 +682,13 @@ get_body_text(#message{body = Body} = Msg) -> end. -spec body_is_encrypted(message()) -> boolean(). -body_is_encrypted(#message{sub_els = SubEls}) -> - lists:keyfind(<<"encrypted">>, #xmlel.name, SubEls) /= false. +body_is_encrypted(#message{sub_els = MsgEls}) -> + case lists:keyfind(<<"encrypted">>, #xmlel.name, MsgEls) of + #xmlel{children = EncEls} -> + lists:keyfind(<<"payload">>, #xmlel.name, EncEls) /= false; + false -> + false + end. -spec inspect_error(iq()) -> {atom(), binary()}. inspect_error(IQ) -> |