diff options
Diffstat (limited to 'src/cowboy_handler.erl')
-rw-r--r-- | src/cowboy_handler.erl | 32 |
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. |