log abnormal rexi worker deaths
diff --git a/src/rexi_server.erl b/src/rexi_server.erl
index eb9b0ca..b5db9ec 100644
--- a/src/rexi_server.erl
+++ b/src/rexi_server.erl
@@ -75,10 +75,18 @@
init_p(From, {M,F,A}) ->
put(rexi_from, From),
put(initial_call, {M,F,length(A)}),
- try apply(M, F, A) catch _:Reason -> exit(Reason) end.
+ try apply(M, F, A) catch exit:normal -> ok; Class:Reason ->
+ Stack = clean_stack(),
+ error_logger:error_report([{?MODULE, {Class, Reason}}, Stack]),
+ exit({Reason, Stack})
+ end.
%% internal
+clean_stack() ->
+ lists:map(fun({M,F,A}) when is_list(A) -> {M,F,length(A)}; (X) -> X end,
+ erlang:get_stacktrace()).
+
add_worker(Worker, Tab) ->
ets:insert(Tab, Worker), Tab.