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.