]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream commit
authordtucker@openbsd.org <dtucker@openbsd.org>
Wed, 2 Mar 2016 22:43:52 +0000 (22:43 +0000)
committerDamien Miller <djm@mindrot.org>
Fri, 4 Mar 2016 04:12:20 +0000 (15:12 +1100)
Improve accuracy of reported transfer speeds by waiting
 for the ack from the other end.  Pointed out by mmcc@, ok deraadt@ markus@

Upstream-ID: 99f1cf15c9a8f161086b814d414d862795ae153d

scp.c

diff --git a/scp.c b/scp.c
index 0bdd7cb0b29d7177b5582db0793a66a82eb118f8..3f0d750903aa74ac90a3f2fa7484bac524f40023 100644 (file)
--- a/scp.c
+++ b/scp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: scp.c,v 1.184 2015/11/27 00:49:31 deraadt Exp $ */
+/* $OpenBSD: scp.c,v 1.185 2016/03/02 22:43:52 dtucker Exp $ */
 /*
  * scp - secure remote copy.  This is basically patched BSD rcp which
  * uses ssh to do the data transfer (instead of using rcmd).
@@ -848,8 +848,6 @@ next:                       if (fd != -1) {
                                haderr = errno;
                }
                unset_nonblock(remout);
-               if (showprogress)
-                       stop_progress_meter();
 
                if (fd != -1) {
                        if (close(fd) < 0 && !haderr)
@@ -861,6 +859,8 @@ next:                       if (fd != -1) {
                else
                        run_err("%s: %s", name, strerror(haderr));
                (void) response();
+               if (showprogress)
+                       stop_progress_meter();
        }
 }
 
@@ -1145,8 +1145,6 @@ bad:                      run_err("%s: %s", np, strerror(errno));
                        }
                }
                unset_nonblock(remin);
-               if (showprogress)
-                       stop_progress_meter();
                if (count != 0 && wrerr == NO &&
                    atomicio(vwrite, ofd, bp->buf, count) != count) {
                        wrerr = YES;
@@ -1185,6 +1183,8 @@ bad:                      run_err("%s: %s", np, strerror(errno));
                        wrerrno = errno;
                }
                (void) response();
+               if (showprogress)
+                       stop_progress_meter();
                if (setimes && wrerr == NO) {
                        setimes = 0;
                        if (utimes(np, tv) < 0) {