aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_clock.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2017-11-01 17:06:37 +0000
committerLoïc Hoguin <[email protected]>2017-11-01 17:06:37 +0000
commit5bb6438e10ae6b620b88f8d9989e6f6c0d252f34 (patch)
tree7c5fb1cde5e31df7a069889ccbdde3f2c51bc347 /src/cowboy_clock.erl
parent836342abb86b3ff15d1c8319a455d776f7027a87 (diff)
downloadcowboy-5bb6438e10ae6b620b88f8d9989e6f6c0d252f34.tar.gz
cowboy-5bb6438e10ae6b620b88f8d9989e6f6c0d252f34.tar.bz2
cowboy-5bb6438e10ae6b620b88f8d9989e6f6c0d252f34.zip
Don't crash when cowboy_clock is not running
This can happen normally when Cowboy is restarted, for example. Instead of failing requests when that happens, we degrade gracefully and do a little more work to provide the current date header.
Diffstat (limited to 'src/cowboy_clock.erl')
-rw-r--r--src/cowboy_clock.erl10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/cowboy_clock.erl b/src/cowboy_clock.erl
index e0e387d..28f8a1b 100644
--- a/src/cowboy_clock.erl
+++ b/src/cowboy_clock.erl
@@ -49,9 +49,17 @@ start_link() ->
stop() ->
gen_server:call(?MODULE, stop).
+%% When the ets table doesn't exist, either because of a bug
+%% or because Cowboy is being restarted, we perform in a
+%% slightly degraded state and build a new timestamp for
+%% every request.
-spec rfc1123() -> binary().
rfc1123() ->
- ets:lookup_element(?MODULE, rfc1123, 2).
+ try
+ ets:lookup_element(?MODULE, rfc1123, 2)
+ catch error:badarg ->
+ rfc1123(erlang:universaltime())
+ end.
-spec rfc1123(calendar:datetime()) -> binary().
rfc1123(DateTime) ->