diff options
author | Erlang/OTP <[email protected]> | 2018-02-21 15:09:46 +0100 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2018-02-21 15:09:46 +0100 |
commit | d42ff869391cea3cec9224077f33cf33f58e41be (patch) | |
tree | 69a89094f3bce2f04fae1b23e953276c3cac13d6 /lib/ssh/src/ssh_connection.erl | |
parent | 309ef748ddc5bde4bcba280ce2739385f27a76e6 (diff) | |
parent | 83cd7724b244a4d5dd3efbdbb66811e781136ac9 (diff) | |
download | otp-d42ff869391cea3cec9224077f33cf33f58e41be.tar.gz otp-d42ff869391cea3cec9224077f33cf33f58e41be.tar.bz2 otp-d42ff869391cea3cec9224077f33cf33f58e41be.zip |
Merge branch 'hans/ssh/supervisor_timeout/OTP-14907' into maint-20
* hans/ssh/supervisor_timeout/OTP-14907:
ssh: Dont repeat supervisor defaults in map fields
ssh: Move starting of channel child to ssh_channel_sup
ssh: Test case for sup tree when shell server proc times out
Diffstat (limited to 'lib/ssh/src/ssh_connection.erl')
-rw-r--r-- | lib/ssh/src/ssh_connection.erl | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/lib/ssh/src/ssh_connection.erl b/lib/ssh/src/ssh_connection.erl index 7e9ee78fd2..946ae2967b 100644 --- a/lib/ssh/src/ssh_connection.erl +++ b/lib/ssh/src/ssh_connection.erl @@ -812,22 +812,20 @@ start_channel(Cb, Id, Args, SubSysSup, Opts) -> start_channel(Cb, Id, Args, SubSysSup, undefined, Opts). start_channel(Cb, Id, Args, SubSysSup, Exec, Opts) -> - ChildSpec = child_spec(Cb, Id, Args, Exec), ChannelSup = ssh_subsystem_sup:channel_supervisor(SubSysSup), - assert_limit_num_channels_not_exceeded(ChannelSup, Opts), - ssh_channel_sup:start_child(ChannelSup, ChildSpec). + case max_num_channels_not_exceeded(ChannelSup, Opts) of + true -> + ssh_channel_sup:start_child(ChannelSup, Cb, Id, Args, Exec); + false -> + throw(max_num_channels_exceeded) + end. -assert_limit_num_channels_not_exceeded(ChannelSup, Opts) -> +max_num_channels_not_exceeded(ChannelSup, Opts) -> MaxNumChannels = ?GET_OPT(max_channels, Opts), NumChannels = length([x || {_,_,worker,[ssh_channel]} <- supervisor:which_children(ChannelSup)]), - if - %% Note that NumChannels is BEFORE starting a new one - NumChannels < MaxNumChannels -> - ok; - true -> - throw(max_num_channels_exceeded) - end. + %% Note that NumChannels is BEFORE starting a new one + NumChannels < MaxNumChannels. %%-------------------------------------------------------------------- %%% Internal functions @@ -874,14 +872,6 @@ check_subsystem(SsName, Options) -> Value end. -child_spec(Callback, Id, Args, Exec) -> - Name = make_ref(), - StartFunc = {ssh_channel, start_link, [self(), Id, Callback, Args, Exec]}, - Restart = temporary, - Shutdown = 3600, - Type = worker, - {Name, StartFunc, Restart, Shutdown, Type, [ssh_channel]}. - start_cli(#connection{cli_spec = no_cli}, _) -> {error, cli_disabled}; start_cli(#connection{options = Options, |