aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Kovalev <[email protected]>2015-03-26 11:15:05 +0300
committerLoïc Hoguin <[email protected]>2015-05-06 11:27:47 +0300
commitf25e452139478c0c24ac8462458a2324ba7b1763 (patch)
tree71460e29476a24adf3bfe0dc1b7fc750a575e621
parent050621231ca29eb8004721549c34d00b79f89a68 (diff)
downloadcowboy-f25e452139478c0c24ac8462458a2324ba7b1763.tar.gz
cowboy-f25e452139478c0c24ac8462458a2324ba7b1763.tar.bz2
cowboy-f25e452139478c0c24ac8462458a2324ba7b1763.zip
fixed cowboy_clock inbox overflow if system clock was changed
-rw-r--r--src/cowboy_clock.erl6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/cowboy_clock.erl b/src/cowboy_clock.erl
index 37767e1..66fd5d4 100644
--- a/src/cowboy_clock.erl
+++ b/src/cowboy_clock.erl
@@ -65,7 +65,7 @@ init([]) ->
named_table, {read_concurrency, true}]),
T = erlang:universaltime(),
B = update_rfc1123(<<>>, undefined, T),
- {ok, TRef} = timer:send_interval(1000, update),
+ TRef = erlang:send_after(1000, self(), update),
ets:insert(?MODULE, {rfc1123, B}),
{ok, #state{universaltime=T, rfc1123=B, tref=TRef}}.
@@ -83,10 +83,12 @@ handle_cast(_Msg, State) ->
{noreply, State}.
-spec handle_info(any(), State) -> {noreply, State} when State::#state{}.
-handle_info(update, #state{universaltime=Prev, rfc1123=B1, tref=TRef}) ->
+handle_info(update, #state{universaltime=Prev, rfc1123=B1, tref=TRef0}) ->
+ erlang:cancel_timer(TRef0),
T = erlang:universaltime(),
B2 = update_rfc1123(B1, Prev, T),
ets:insert(?MODULE, {rfc1123, B2}),
+ TRef = erlang:send_after(1000, self(), update),
{noreply, #state{universaltime=T, rfc1123=B2, tref=TRef}};
handle_info(_Info, State) ->
{noreply, State}.