aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Dudka <kdudka@redhat.com>2013-10-07 16:07:50 +0200
committerDaniel Stenberg <daniel@haxx.se>2013-10-12 23:03:28 +0200
commitd015f4ccac627852869cb45e31ccdc9fbd97dc47 (patch)
tree6adc98e7f8317323f427cf27b8bea0dfd5847133
parent143d7c13d8dfee156a4bd6ec442a5394b3736588 (diff)
ssh: improve the logic for detecting blocking direction
This fixes a regression introduced by commit 0feeab78 limiting the speed of SCP upload to 16384 B/s on a fast connection (such as localhost).
-rw-r--r--RELEASE-NOTES1
-rw-r--r--lib/ssh.c8
2 files changed, 6 insertions, 3 deletions
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index ab59159c7..8dc2eb3a1 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -59,6 +59,7 @@ This release includes the following bugfixes:
o win32: fix Visual Studio 2010 build with WINVER >= 0x600 [22]
o configure: use icc options without space [21]
o test1112: Increase the timeout from 7s to 16s [20]
+ o SCP: upload speed on a fast connection limited to 16384 B/s
This release includes the following known bugs:
diff --git a/lib/ssh.c b/lib/ssh.c
index b1921cd14..c213225db 100644
--- a/lib/ssh.c
+++ b/lib/ssh.c
@@ -2288,6 +2288,10 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
sshc->actualcode = result;
}
else {
+ /* store this original bitmask setup to use later on if we can't
+ figure out a "real" bitmask */
+ sshc->orig_waitfor = data->req.keepon;
+
/* we want to use the _sending_ function even when the socket turns
out readable as the underlying libssh2 scp send function will deal
with both accordingly */
@@ -2604,9 +2608,7 @@ static void ssh_block2waitfor(struct connectdata *conn, bool block)
{
struct ssh_conn *sshc = &conn->proto.sshc;
int dir;
- if(!block)
- conn->waitfor = 0;
- else if((dir = libssh2_session_block_directions(sshc->ssh_session))) {
+ if(block && (dir = libssh2_session_block_directions(sshc->ssh_session))) {
/* translate the libssh2 define bits into our own bit defines */
conn->waitfor = ((dir&LIBSSH2_SESSION_BLOCK_INBOUND)?KEEP_RECV:0) |
((dir&LIBSSH2_SESSION_BLOCK_OUTBOUND)?KEEP_SEND:0);