diff options
author | Erlang/OTP <otp@erlang.org> | 2021-02-24 14:58:43 +0100 |
---|---|---|
committer | Erlang/OTP <otp@erlang.org> | 2021-02-24 14:58:43 +0100 |
commit | d345de909d1c8ed8dfe48a0b92ed10eb51b18b74 (patch) | |
tree | beee8e8737ef2d9233dc0392f56a01deb1383e4a | |
parent | 93caf7975a293bfd842f2c77ccab3bb8a4660363 (diff) | |
parent | b6974c0f4cf19910c100cc50dfab74adeddf6f25 (diff) | |
download | erlang-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.erl | 22 |
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}. |