Skip to content

Commit

Permalink
Use skip_body directly between requests
Browse files Browse the repository at this point in the history
There's no need for more complex logic now that we have
the API for it.
  • Loading branch information
essen committed Sep 15, 2012
1 parent 0aaa717 commit f65f7d1
Showing 1 changed file with 4 additions and 13 deletions.
17 changes: 4 additions & 13 deletions src/cowboy_protocol.erl
Expand Up @@ -404,7 +404,10 @@ terminate_request(HandlerState, Req, State) ->
next_request(Req=#http_req{connection=Conn}, State=#state{
req_keepalive=Keepalive}, HandlerRes) ->
cowboy_req:ensure_response(Req, 204),
{BodyRes, Buffer} = ensure_body_processed(Req),
{BodyRes, Buffer} = case cowboy_req:skip_body(Req) of
{ok, Req2} -> {ok, Req2#http_req.buffer};
{error, _} -> {close, <<>>}
end,
%% Flush the resp_sent message before moving on.
receive {cowboy_req, resp_sent} -> ok after 0 -> ok end,
case {HandlerRes, BodyRes, Conn} of
Expand All @@ -416,18 +419,6 @@ next_request(Req=#http_req{connection=Conn}, State=#state{
terminate(State)
end.

-spec ensure_body_processed(cowboy_req:req()) -> {ok | close, binary()}.
ensure_body_processed(#http_req{body_state=done, buffer=Buffer}) ->
{ok, Buffer};
ensure_body_processed(Req=#http_req{body_state=waiting}) ->
case cowboy_req:skip_body(Req) of
{ok, Req2} -> {ok, Req2#http_req.buffer};
{error, _Reason} -> {close, <<>>}
end;
ensure_body_processed(Req=#http_req{body_state={stream, _, _, _}}) ->
{ok, Req2} = cowboy_req:multipart_skip(Req),
ensure_body_processed(Req2).

%% Only send an error reply if there is no resp_sent message.
-spec error_terminate(cowboy_http:status(), #state{}) -> ok.
error_terminate(Code, State=#state{socket=Socket, transport=Transport,
Expand Down

0 comments on commit f65f7d1

Please sign in to comment.