mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 20:30:23 +00:00
Add a test for websocket hibernate + timeout and fix this use case
The issue was that we were calling erlang:hibernate before a receive .. after .. end call. Erlang hibernates the process before reaching the receive instruction and we therefore couldn't enter the after clause when hibernating. This is now fixed by using erlang:send_after instead and receiving that message instead of using an after clause.
This commit is contained in:
parent
04f55eb3c9
commit
d0f711a61d
3 changed files with 80 additions and 7 deletions
29
test/ws_timeout_hibernate_handler.erl
Normal file
29
test/ws_timeout_hibernate_handler.erl
Normal file
|
@ -0,0 +1,29 @@
|
|||
%% Feel free to use, reuse and abuse the code in this file.
|
||||
|
||||
-module(ws_timeout_hibernate_handler).
|
||||
-behaviour(cowboy_http_handler).
|
||||
-behaviour(cowboy_http_websocket_handler).
|
||||
-export([init/3, handle/2, terminate/2]).
|
||||
-export([websocket_init/3, websocket_handle/3,
|
||||
websocket_info/3, websocket_terminate/3]).
|
||||
|
||||
init(_Any, _Req, _Opts) ->
|
||||
{upgrade, protocol, cowboy_http_websocket}.
|
||||
|
||||
handle(_Req, _State) ->
|
||||
exit(badarg).
|
||||
|
||||
terminate(_Req, _State) ->
|
||||
exit(badarg).
|
||||
|
||||
websocket_init(_TransportName, Req, _Opts) ->
|
||||
{ok, Req, undefined, 1000, hibernate}.
|
||||
|
||||
websocket_handle(_Frame, Req, State) ->
|
||||
{ok, Req, State, hibernate}.
|
||||
|
||||
websocket_info(_Info, Req, State) ->
|
||||
{ok, Req, State, hibernate}.
|
||||
|
||||
websocket_terminate(_Reason, _Req, _State) ->
|
||||
ok.
|
Loading…
Add table
Add a link
Reference in a new issue