summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2010-08-24 14:43:14 +0100
committerAlexandru Scvortov <alexandru@rabbitmq.com>2010-08-24 14:43:14 +0100
commitc963fbf3f728f0f8235ed2a91ced67409dc82cf7 (patch)
treeace79c9ebb72d7f30aae40fdf2d7d6617a584524 /src
parent98d05ad4189a941da2aef1028d0d8d9b457a1a1f (diff)
downloadrabbitmq-server-git-c963fbf3f728f0f8235ed2a91ced67409dc82cf7.tar.gz
added error handling wrappers for prioritisers
Diffstat (limited to 'src')
-rw-r--r--src/gen_server2.erl40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/gen_server2.erl b/src/gen_server2.erl
index 5a7559ce55..9afeadd4be 100644
--- a/src/gen_server2.erl
+++ b/src/gen_server2.erl
@@ -615,15 +615,15 @@ in({'$gen_pcast', {Priority, Msg}}, Queue, _GS2State) ->
priority_queue:in({'$gen_cast', Msg}, Priority, Queue);
in({'$gen_pcall', From, {Priority, Msg}}, Queue, _GS2State) ->
priority_queue:in({'$gen_call', From, Msg}, Priority, Queue);
-in({'$gen_cast', Msg}, Queue, #gs2_state { prioritise_cast = PC,
- state = State }) ->
- priority_queue:in({'$gen_cast', Msg}, PC(Msg, State), Queue);
-in({'$gan_call', From, Msg}, Queue, #gs2_state { prioritise_call = PC,
- state = State }) ->
- priority_queue:in({'$gen_call', Msg}, PC(Msg, From, State), Queue);
-in(Input, Queue, #gs2_state { prioritise_info = PI,
- state = State }) ->
- priority_queue:in(Input, PI(Input, State), Queue).
+in({'$gen_cast', Msg}, Queue,
+ GS2State = #gs2_state { prioritise_cast = PC }) ->
+ priority_queue:in({'$gen_cast', Msg}, PC(Msg, GS2State), Queue);
+in({'$gan_call', From, Msg}, Queue,
+ GS2State = #gs2_state { prioritise_call = PC }) ->
+ priority_queue:in({'$gen_call', Msg}, PC(Msg, From, GS2State), Queue);
+in(Input, Queue,
+ GS2State = #gs2_state { prioritise_info = PI }) ->
+ priority_queue:in(Input, PI(Input, GS2State), Queue).
process_msg(Msg,
GS2State = #gs2_state { parent = Parent,
@@ -1174,11 +1174,25 @@ find_prioritisers(GS2State = #gs2_state { mod = Mod }) ->
function_exported_or_default(Mod, Fun, Ar, Default) ->
case erlang:function_exported(Mod, Fun, Ar) of
true -> case Ar of
- 2 -> fun (Msg, State) ->
- Mod:Fun(Msg, State)
+ 2 -> fun (Msg, #gs2_state { state = State,
+ name = Name,
+ debug = Debug }) ->
+ try
+ Mod:Fun(Msg, State)
+ catch
+ Reason ->
+ terminate(Reason, Name, Msg, Mod, State, Debug)
+ end
end;
- 3 -> fun (Msg, From, State) ->
- Mod:Fun(Msg, From, State)
+ 3 -> fun (Msg, From, #gs2_state { state = State,
+ name = Name,
+ debug = Debug }) ->
+ try
+ Mod:Fun(Msg, From, State)
+ catch
+ Reason ->
+ terminate(Reason, Name, Msg, Mod, State, Debug)
+ end
end
end;
false -> Default