summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErlang/OTP <otp@erlang.org>2021-02-24 14:58:43 +0100
committerErlang/OTP <otp@erlang.org>2021-02-24 14:58:43 +0100
commitd345de909d1c8ed8dfe48a0b92ed10eb51b18b74 (patch)
treebeee8e8737ef2d9233dc0392f56a01deb1383e4a
parent93caf7975a293bfd842f2c77ccab3bb8a4660363 (diff)
parentb6974c0f4cf19910c100cc50dfab74adeddf6f25 (diff)
downloaderlang-d345de909d1c8ed8dfe48a0b92ed10eb51b18b74.tar.gz
Merge branch 'hans/ssh/ssh_controller_timeout/ERIERL-581/OTP-17173' into maint-23
* hans/ssh/ssh_controller_timeout/ERIERL-581/OTP-17173: ssh: Fix crash of controller ssh: Longer timeout for controller calls
-rw-r--r--lib/ssh/src/ssh_controller.erl22
1 files changed, 15 insertions, 7 deletions
diff --git a/lib/ssh/src/ssh_controller.erl b/lib/ssh/src/ssh_controller.erl
index 4b8d10c3c1..d8fbc8d0f2 100644
--- a/lib/ssh/src/ssh_controller.erl
+++ b/lib/ssh/src/ssh_controller.erl
@@ -60,11 +60,13 @@ start_link(Role, RegName) ->
%% Internal application API
%%====================================================================
+-define(TIMEOUT, 30000).
+
start_system_subsystem(Controller, Sup, Host, Port, Profile, Options, ChildSpec) ->
- gen_server:call(Controller, {start_system_subsystem, Sup, Host, Port, Profile, Options, ChildSpec}).
+ gen_server:call(Controller, {start_system_subsystem, Sup, Host, Port, Profile, Options, ChildSpec}, ?TIMEOUT).
stop_system(Controller, SysSup) ->
- gen_server:call(Controller, {stop_system,SysSup}).
+ gen_server:call(Controller, {stop_system,SysSup}, ?TIMEOUT).
%%====================================================================
%% Internal process state
@@ -102,11 +104,17 @@ handle_call({start_system_subsystem, Sup, Address, Port, Profile, Options, Child
handle_call({stop_system,SysSup}, _From, D) ->
- case supervisor:which_children(SysSup) of
- [] ->
- ssh_system_sup:stop_system(D#data.role, SysSup);
- _X ->
- ok
+ try
+ case supervisor:which_children(SysSup) of
+ [] ->
+ ssh_system_sup:stop_system(D#data.role, SysSup);
+ _X ->
+ ok
+ end
+ catch
+ _:_ ->
+ %% Already stopped (?)
+ skip
end,
{reply, ok, D}.