From 9f9c7c5eabf3d6915afb0b0b62fe25d04101d50e Mon Sep 17 00:00:00 2001 From: Simon MacMullen Date: Mon, 4 Apr 2011 16:35:51 +0100 Subject: rabbit_misc:execute_pre_post_mnesia_tx/1. --- src/rabbit_binding.erl | 5 ++--- src/rabbit_exchange.erl | 5 ++--- src/rabbit_misc.erl | 7 +++++++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl index 508d19bf..8c6732f9 100644 --- a/src/rabbit_binding.erl +++ b/src/rabbit_binding.erl @@ -106,9 +106,8 @@ recover(XNames, QNames) -> false -> Acc end end, dict:new(), rabbit_durable_route), - rabbit_misc:execute_mnesia_transaction( - fun () -> ok end, - fun (ok, Tx) -> + rabbit_misc:execute_pre_post_mnesia_tx( + fun (Tx) -> dict:map(fun (XName, Bindings) -> {ok, X} = rabbit_exchange:lookup(XName), rabbit_exchange:callback(X, add_bindings, diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 86ce69ef..b39fe32c 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -91,9 +91,8 @@ recover() -> [_] -> Acc end end, [], rabbit_durable_exchange), - rabbit_misc:execute_mnesia_transaction( - fun () -> ok end, - fun (ok, Tx) -> + rabbit_misc:execute_pre_post_mnesia_tx( + fun (Tx) -> [rabbit_exchange:callback(X, create, [Tx, X]) || X <- Xs] end), [XName || #exchange{name = XName} <- Xs]. diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 2e9563cf..8927020f 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -34,6 +34,7 @@ -export([with_user/2, with_user_and_vhost/3]). -export([execute_mnesia_transaction/1]). -export([execute_mnesia_transaction/2]). +-export([execute_pre_post_mnesia_tx/1]). -export([execute_mnesia_tx_with_tail/1]). -export([ensure_ok/2]). -export([makenode/1, nodeparts/1, cookie_hash/0, tcp_name/3]). @@ -135,6 +136,7 @@ -spec(execute_mnesia_transaction/1 :: (thunk(A)) -> A). -spec(execute_mnesia_transaction/2 :: (thunk(A), fun ((A, boolean()) -> B)) -> B). +-spec(execute_pre_post_mnesia_tx/1 :: (fun ((boolean()) -> B)) -> B). -spec(execute_mnesia_tx_with_tail/1 :: (thunk(fun ((boolean()) -> B))) -> B | (fun ((boolean()) -> B))). -spec(ensure_ok/2 :: (ok_or_error(), atom()) -> 'ok'). @@ -404,6 +406,11 @@ execute_mnesia_transaction(TxFun, PrePostCommitFun) -> Result end), false). +%% Like the above, but without the main body. +execute_pre_post_mnesia_tx(PrePostCommitFun) -> + execute_mnesia_transaction(fun () -> ok end, + fun (ok, Tx) -> PrePostCommitFun(Tx) end). + %% Like execute_mnesia_transaction/2, but TxFun is expected to return a %% TailFun which gets called immediately before and after the tx commit execute_mnesia_tx_with_tail(TxFun) -> -- cgit v1.2.1