From f205d44518800ff669ce8421dcb5f8f04fc6cccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Sun, 16 Sep 2012 13:57:27 +0200 Subject: Add a function to lock request responses instead of inlining Just more cleanup in order to have req() opaque. --- src/cowboy_protocol.erl | 2 +- src/cowboy_req.erl | 7 +++++++ src/cowboy_rest.erl | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/cowboy_protocol.erl b/src/cowboy_protocol.erl index 04b42a5..ad22141 100644 --- a/src/cowboy_protocol.erl +++ b/src/cowboy_protocol.erl @@ -383,7 +383,7 @@ handler_call(HandlerState, Req, State=#state{handler={Handler, Opts}}, -spec handler_terminate(any(), cowboy_req:req(), #state{}) -> ok. handler_terminate(HandlerState, Req, #state{handler={Handler, Opts}}) -> try - Handler:terminate(Req#http_req{resp_state=locked}, HandlerState) + Handler:terminate(cowboy_req:lock(Req), HandlerState) catch Class:Reason -> PLReq = cowboy_req:to_list(Req), error_logger:error_msg( diff --git a/src/cowboy_req.erl b/src/cowboy_req.erl index 7bc8ad6..741a8f1 100644 --- a/src/cowboy_req.erl +++ b/src/cowboy_req.erl @@ -103,6 +103,7 @@ %% Misc API. -export([compact/1]). +-export([lock/1]). -export([to_list/1]). -export([transport/1]). @@ -908,6 +909,12 @@ compact(Req) -> bindings=undefined, headers=[], p_headers=[], cookies=[]}. +%% @doc Prevent any further responses. +%% @private +-spec lock(Req) -> Req when Req::req(). +lock(Req) -> + Req#http_req{resp_state=locked}. + %% @doc Convert the Req object to a list of key/values. -spec to_list(req()) -> [{atom(), any()}]. to_list(Req) -> diff --git a/src/cowboy_rest.erl b/src/cowboy_rest.erl index a6c3672..9e5904c 100644 --- a/src/cowboy_rest.erl +++ b/src/cowboy_rest.erl @@ -897,7 +897,7 @@ respond(Req, State, StatusCode) -> terminate(Req, #state{handler=Handler, handler_state=HandlerState}) -> case erlang:function_exported(Handler, rest_terminate, 2) of true -> ok = Handler:rest_terminate( - Req#http_req{resp_state=locked}, HandlerState); + cowboy_req:lock(Req), HandlerState); false -> ok end, {ok, Req}. -- cgit v1.2.3