diff options
Diffstat (limited to 'src/cowboy_websocket.erl')
-rw-r--r-- | src/cowboy_websocket.erl | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/cowboy_websocket.erl b/src/cowboy_websocket.erl index 6c41137..d13441d 100644 --- a/src/cowboy_websocket.erl +++ b/src/cowboy_websocket.erl @@ -71,8 +71,12 @@ upgrade(Req, Env, Handler, HandlerOpts) -> {ok, State2, Req2} -> handler_init(State2, Req2, HandlerOpts) catch _:_ -> - cowboy_req:maybe_reply(400, Req), - exit(normal) + receive + {cowboy_req, resp_sent} -> ok + after 0 -> + cowboy_req:reply(400, Req), + exit(normal) + end end. -spec websocket_upgrade(#state{}, Req) @@ -144,11 +148,12 @@ handler_init(State=#state{env=Env, transport=Transport, cowboy_req:ensure_response(Req2, 400), {ok, Req2, [{result, closed}|Env]} catch Class:Reason -> - cowboy_req:maybe_reply(400, Req), + Stacktrace = erlang:get_stacktrace(), + cowboy_req:maybe_reply(Stacktrace, Req), erlang:Class([ {reason, Reason}, {mfa, {Handler, websocket_init, 3}}, - {stacktrace, erlang:get_stacktrace()}, + {stacktrace, Stacktrace}, {req, cowboy_req:to_list(Req)}, {opts, HandlerOpts} ]) |