aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2017-05-19 16:46:28 +0200
committerLoïc Hoguin <[email protected]>2017-05-19 16:46:28 +0200
commit8e623296f4fa735e430cedeb57d816dfcca7883b (patch)
treed02097aca878925ab2d2f69dc2a0cd17bacf0ea5
parent3aab5ef99b98f618f701510d76bcf639b915794f (diff)
downloadgun-8e623296f4fa735e430cedeb57d816dfcca7883b.tar.gz
gun-8e623296f4fa735e430cedeb57d816dfcca7883b.tar.bz2
gun-8e623296f4fa735e430cedeb57d816dfcca7883b.zip
Ensure the stacktrace is passed when crashing
-rw-r--r--src/gun.erl14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/gun.erl b/src/gun.erl
index 173bb2d..3eafe10 100644
--- a/src/gun.erl
+++ b/src/gun.erl
@@ -78,7 +78,7 @@
%% Internals.
-export([start_link/4]).
--export([init/5]).
+-export([proc_lib_hack/5]).
-export([system_continue/3]).
-export([system_terminate/4]).
-export([system_code_change/4]).
@@ -527,9 +527,19 @@ dbg_send_raw(ServerPid, Data) ->
%% Internals.
start_link(Owner, Host, Port, Opts) ->
- proc_lib:start_link(?MODULE, init,
+ proc_lib:start_link(?MODULE, proc_lib_hack,
[self(), Owner, Host, Port, Opts]).
+proc_lib_hack(Parent, Owner, Host, Port, Opts) ->
+ try
+ init(Parent, Owner, Host, Port, Opts)
+ catch
+ _:normal -> exit(normal);
+ _:shutdown -> exit(shutdown);
+ _:Reason = {shutdown, _} -> exit(Reason);
+ _:Reason -> exit({Reason, erlang:get_stacktrace()})
+ end.
+
init(Parent, Owner, Host, Port, Opts) ->
ok = proc_lib:init_ack(Parent, {ok, self()}),
Retry = maps:get(retry, Opts, 5),