aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_handler.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/cowboy_handler.erl')
-rw-r--r--src/cowboy_handler.erl32
1 files changed, 3 insertions, 29 deletions
diff --git a/src/cowboy_handler.erl b/src/cowboy_handler.erl
index 165888e..7791fe2 100644
--- a/src/cowboy_handler.erl
+++ b/src/cowboy_handler.erl
@@ -35,10 +35,8 @@
-spec execute(Req, Env) -> {ok, Req, Env}
when Req::cowboy_req:req(), Env::cowboy_middleware:env().
-execute(Req, Env) ->
- {_, Handler} = lists:keyfind(handler, 1, Env),
- {_, HandlerOpts} = lists:keyfind(handler_opts, 1, Env),
- try Handler:init(Req, HandlerOpts) of
+execute(Req, Env=#{handler := Handler, handler_opts := HandlerOpts}) ->
+ case Handler:init(Req, HandlerOpts) of
{ok, Req2, State} ->
Result = terminate(normal, Req2, State, Handler),
{ok, Req2, [{result, Result}|Env]};
@@ -50,37 +48,13 @@ execute(Req, Env) ->
Mod:upgrade(Req2, Env, Handler, State, Timeout, run);
{Mod, Req2, State, Timeout, hibernate} ->
Mod:upgrade(Req2, Env, Handler, State, Timeout, hibernate)
- catch Class:Reason ->
- Stacktrace = erlang:get_stacktrace(),
- cowboy_req:maybe_reply(Stacktrace, Req),
- terminate({crash, Class, Reason}, Req, HandlerOpts, Handler),
- exit({cowboy_handler, [
- {class, Class},
- {reason, Reason},
- {mfa, {Handler, init, 2}},
- {stacktrace, Stacktrace},
- {req, cowboy_req:to_list(Req)},
- {opts, HandlerOpts}
- ]})
end.
-spec terminate(any(), Req, any(), module()) -> ok when Req::cowboy_req:req().
terminate(Reason, Req, State, Handler) ->
case erlang:function_exported(Handler, terminate, 3) of
true ->
- try
- Handler:terminate(Reason, cowboy_req:lock(Req), State)
- catch Class:Reason2 ->
- exit({cowboy_handler, [
- {class, Class},
- {reason, Reason2},
- {mfa, {Handler, terminate, 3}},
- {stacktrace, erlang:get_stacktrace()},
- {req, cowboy_req:to_list(Req)},
- {state, State},
- {terminate_reason, Reason}
- ]})
- end;
+ Handler:terminate(Reason, cowboy_req:lock(Req), State);
false ->
ok
end.