diff options
| author | Tony Garnock-Jones <tonyg@kcbbs.gen.nz> | 2009-12-02 06:55:17 +0000 |
|---|---|---|
| committer | Tony Garnock-Jones <tonyg@kcbbs.gen.nz> | 2009-12-02 06:55:17 +0000 |
| commit | a01627c9acc9d7053a7112f66d49e2588d4205ae (patch) | |
| tree | 6cfaf6a34d12384a2085eb975679397a6f8bc2d9 /src | |
| parent | d1ed3feb06fbf9bf117c5978f158b8e181c68cdd (diff) | |
| download | rabbitmq-server-git-a01627c9acc9d7053a7112f66d49e2588d4205ae.tar.gz | |
Cope more gracefully with failed callbacks.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_exchange_events.erl | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/rabbit_exchange_events.erl b/src/rabbit_exchange_events.erl index f5372732fd..b9dfef86b7 100644 --- a/src/rabbit_exchange_events.erl +++ b/src/rabbit_exchange_events.erl @@ -71,8 +71,8 @@ handle_table_event({write, rabbit_route, #route{binding = B}, [], _ActivityId}) handle_table_event({delete, rabbit_route, #route{binding = B}, _OldRecs, _ActivityId}) -> %% Deleted binding. ok = with_exchange(B, fun (X = #exchange{type = Type}) -> Type:delete_binding(X, B) end); -handle_table_event(Event) -> - exit({unhandled_table_event, Event}). +handle_table_event(_Event) -> + {error, unhandled_table_event}. %%--------------------------------------------------------------------------- @@ -88,7 +88,15 @@ handle_cast(Request, State) -> {stop, {unhandled_cast, Request}, State}. handle_info({mnesia_table_event, Event}, State) -> - ok = handle_table_event(Event), + case catch handle_table_event(Event) of + {'EXIT', Reason} -> + rabbit_log:error("Exchange event callback failed~n~p~n", [[{event, Event}, + {reason, Reason}]]); + ok -> + ok; + {error, unhandled_table_event} -> + rabbit_log:error("Unexpected mnesia_table_event~n~p~n", [Event]) + end, {noreply, State}; handle_info(Info, State) -> {stop, {unhandled_info, Info}, State}. |
