aboutsummaryrefslogtreecommitdiffstats
path: root/src/ranch.erl
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 /src/ranch.erl
parente4720fc629ac056b1b9ec53a46a7af8aeaa43458 (diff)
downloadranch-6a26bb8d91d61ff9755a9844bd2a5f7ca8ada888.tar.gz
ranch-6a26bb8d91d61ff9755a9844bd2a5f7ca8ada888.tar.bz2
ranch-6a26bb8d91d61ff9755a9844bd2a5f7ca8ada888.zip
Fix stopping unknown listeners
Diffstat (limited to 'src/ranch.erl')
-rw-r--r--src/ranch.erl27
1 files changed, 18 insertions, 9 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()}.