aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2012-09-16 13:57:27 +0200
committerLoïc Hoguin <[email protected]>2012-09-17 13:57:28 +0200
commitf205d44518800ff669ce8421dcb5f8f04fc6cccb (patch)
tree60a674ba54b5738fa01a722ebd893de8fba76ea8
parent8d5f8db90a10a8ca16f8f17bcb076ff4b93e9c63 (diff)
downloadcowboy-f205d44518800ff669ce8421dcb5f8f04fc6cccb.tar.gz
cowboy-f205d44518800ff669ce8421dcb5f8f04fc6cccb.tar.bz2
cowboy-f205d44518800ff669ce8421dcb5f8f04fc6cccb.zip
Add a function to lock request responses instead of inlining
Just more cleanup in order to have req() opaque.
-rw-r--r--src/cowboy_protocol.erl2
-rw-r--r--src/cowboy_req.erl7
-rw-r--r--src/cowboy_rest.erl2
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}.