@@ -154,8 +154,8 @@ add(Binding, InnerFun, ActingUser) ->
154
154
fun (Src , Dst , B ) ->
155
155
case rabbit_exchange :validate_binding (Src , B ) of
156
156
ok ->
157
- lock_resource (Src ),
158
- lock_resource (Dst ),
157
+ lock_resource (Src , read ),
158
+ lock_resource (Dst , read ),
159
159
% % this argument is used to check queue exclusivity;
160
160
% % in general, we want to fail on that in preference to
161
161
% % anything else
@@ -174,8 +174,6 @@ add(Binding, InnerFun, ActingUser) ->
174
174
end , fun not_found_or_absent_errs /1 ).
175
175
176
176
add (Src , Dst , B , ActingUser ) ->
177
- lock_resource (Src ),
178
- lock_resource (Dst ),
179
177
[SrcDurable , DstDurable ] = [durable (E ) || E <- [Src , Dst ]],
180
178
ok = sync_route (# route {binding = B }, SrcDurable , DstDurable ,
181
179
fun mnesia :write /3 ),
@@ -198,8 +196,8 @@ remove(Binding, InnerFun, ActingUser) ->
198
196
binding_action (
199
197
Binding ,
200
198
fun (Src , Dst , B ) ->
201
- lock_resource (Src ),
202
- lock_resource (Dst ),
199
+ lock_resource (Src , read ),
200
+ lock_resource (Dst , read ),
203
201
case mnesia :read (rabbit_route , B , write ) of
204
202
[] -> case mnesia :read (rabbit_durable_route , B , write ) of
205
203
[] -> rabbit_misc :const (ok );
@@ -216,8 +214,6 @@ remove(Binding, InnerFun, ActingUser) ->
216
214
end , fun absent_errs_only /1 ).
217
215
218
216
remove (Src , Dst , B , ActingUser ) ->
219
- lock_resource (Src ),
220
- lock_resource (Dst ),
221
217
ok = sync_route (# route {binding = B }, durable (Src ), durable (Dst ),
222
218
fun delete /3 ),
223
219
Deletions = maybe_auto_delete (
@@ -536,9 +532,11 @@ remove_for_destination(DstName, OnlyDurable, Fun) ->
536
532
537
533
% % Instead of locking entire table on remove operations we can lock the
538
534
% % affected resource only.
539
- lock_resource (Name ) ->
535
+ lock_resource (Name ) -> lock_resource (Name , write ).
536
+
537
+ lock_resource (Name , LockKind ) ->
540
538
mnesia :lock ({global , Name , mnesia :table_info (rabbit_route , where_to_write )},
541
- write ).
539
+ LockKind ).
542
540
543
541
% % Requires that its input binding list is sorted in exchange-name
544
542
% % order, so that the grouping of bindings (for passing to
0 commit comments