aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ssh/src/ssh_connection.erl
diff options
context:
space:
mode:
authorDaniel Goertzen <[email protected]>2012-09-05 13:30:11 -0500
committerIngela Anderton Andin <[email protected]>2012-10-03 19:25:29 +0200
commit79d51c19399a5666eea74118d36812ade5a5b757 (patch)
tree66090045f13049078c3cb7cc86dfa3179d7a11ef /lib/ssh/src/ssh_connection.erl
parenteaead6bf3d330fa909ca5feb33fb211d71891c20 (diff)
downloadotp-79d51c19399a5666eea74118d36812ade5a5b757.tar.gz
otp-79d51c19399a5666eea74118d36812ade5a5b757.tar.bz2
otp-79d51c19399a5666eea74118d36812ade5a5b757.zip
ssh: Ensure that all data is sent before ssh:send returns.
Diffstat (limited to 'lib/ssh/src/ssh_connection.erl')
-rw-r--r--lib/ssh/src/ssh_connection.erl18
1 files changed, 9 insertions, 9 deletions
diff --git a/lib/ssh/src/ssh_connection.erl b/lib/ssh/src/ssh_connection.erl
index e3b8ebfb79..33c8e2aca7 100644
--- a/lib/ssh/src/ssh_connection.erl
+++ b/lib/ssh/src/ssh_connection.erl
@@ -319,7 +319,7 @@ channel_data(ChannelId, DataType, Data,
case ssh_channel:cache_lookup(Cache, ChannelId) of
#channel{remote_id = Id} = Channel0 ->
- {SendList, Channel} = update_send_window(Channel0, DataType,
+ {SendList, Channel} = update_send_window(Channel0#channel{flow_control = From}, DataType,
Data, Connection),
Replies =
lists:map(fun({SendDataType, SendData}) ->
@@ -329,7 +329,7 @@ channel_data(ChannelId, DataType, Data,
SendData)}
end, SendList),
FlowCtrlMsgs = flow_control(Replies,
- Channel#channel{flow_control = From},
+ Channel,
Cache),
{{replies, Replies ++ FlowCtrlMsgs}, Connection};
undefined ->
@@ -1126,13 +1126,13 @@ flow_control(Channel, Cache) ->
flow_control([], Channel, Cache) ->
ssh_channel:cache_update(Cache, Channel),
[];
-flow_control([_|_], #channel{flow_control = From} = Channel, Cache) ->
- case From of
- undefined ->
- [];
- _ ->
- [{flow_control, Cache, Channel, From, ok}]
- end.
+
+flow_control([_|_], #channel{flow_control = From,
+ send_buf = []} = Channel, Cache) when From =/= undefined ->
+ [{flow_control, Cache, Channel, From, ok}];
+flow_control(_,_,_) ->
+ [].
+
encode_pty_opts(Opts) ->
Bin = list_to_binary(encode_pty_opts2(Opts)),