aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Uhlig <[email protected]>2022-07-19 09:43:36 +0200
committerLoïc Hoguin <[email protected]>2022-10-10 11:57:48 +0200
commit6a26bb8d91d61ff9755a9844bd2a5f7ca8ada888 (patch)
treefc25e30b8c5def4b726a260bb254e330033a5f52
parente4720fc629ac056b1b9ec53a46a7af8aeaa43458 (diff)
downloadranch-6a26bb8d91d61ff9755a9844bd2a5f7ca8ada888.tar.gz
ranch-6a26bb8d91d61ff9755a9844bd2a5f7ca8ada888.tar.bz2
ranch-6a26bb8d91d61ff9755a9844bd2a5f7ca8ada888.zip
Fix stopping unknown listeners
-rw-r--r--src/ranch.erl27
-rw-r--r--test/acceptor_SUITE.erl8
2 files changed, 25 insertions, 10 deletions
diff --git a/src/ranch.erl b/src/ranch.erl
index c9cc035..dd16f41 100644
--- a/src/ranch.erl
+++ b/src/ranch.erl
@@ -193,15 +193,24 @@ start_error(_, Error) -> Error.
-spec stop_listener(ref()) -> ok | {error, not_found}.
stop_listener(Ref) ->
- [_, Transport, _, _, _] = ranch_server:get_listener_start_args(Ref),
- TransOpts = get_transport_options(Ref),
- case supervisor:terminate_child(ranch_sup, {ranch_listener_sup, Ref}) of
- ok ->
- _ = supervisor:delete_child(ranch_sup, {ranch_listener_sup, Ref}),
- ranch_server:cleanup_listener_opts(Ref),
- Transport:cleanup(TransOpts);
- {error, Reason} ->
- {error, Reason}
+ try
+ [_, Transport, _, _, _] = ranch_server:get_listener_start_args(Ref),
+ TransOpts = get_transport_options(Ref),
+ {Transport, TransOpts}
+ of
+ {Transport, TransOpts} ->
+ case supervisor:terminate_child(ranch_sup, {ranch_listener_sup, Ref}) of
+ ok ->
+ _ = supervisor:delete_child(ranch_sup, {ranch_listener_sup, Ref}),
+ ranch_server:cleanup_listener_opts(Ref),
+ Transport:cleanup(TransOpts),
+ ok;
+ {error, Reason} ->
+ {error, Reason}
+ end
+ catch
+ error:badarg ->
+ {error, not_found}
end.
-spec suspend_listener(ref()) -> ok | {error, any()}.
diff --git a/test/acceptor_SUITE.erl b/test/acceptor_SUITE.erl
index 851add3..517445b 100644
--- a/test/acceptor_SUITE.erl
+++ b/test/acceptor_SUITE.erl
@@ -111,7 +111,8 @@ groups() ->
misc_set_transport_options,
misc_wait_for_connections,
misc_multiple_ip_local_socket_opts,
- misc_connection_alarms
+ misc_connection_alarms,
+ misc_stop_unknown_listener
]}, {supervisor, [
connection_type_supervisor,
connection_type_supervisor_separate_from_connection,
@@ -659,6 +660,11 @@ do_flush_connection_alarms(Name) ->
ok
end.
+misc_stop_unknown_listener(_) ->
+ doc("Ensure that stopping an unknown listener returns an error."),
+ {error, not_found} = ranch:stop_listener(make_ref()),
+ ok.
+
%% ssl.
ssl_accept_error(_) ->