diff --git a/daemon/tar.c b/daemon/tar.c index ebcaded82..bb0e48308 100644 --- a/daemon/tar.c +++ b/daemon/tar.c @@ -88,7 +88,8 @@ do_tar_in (const char *dir) if (pclose (fp) != 0) { err = errno; - cancel_receive (); + if (r == -1) /* if r == 0, file transfer ended already */ + cancel_receive (); errno = err; reply_with_perror ("pclose: %s", dir); return -1; @@ -209,7 +210,8 @@ do_tgz_in (const char *dir) if (pclose (fp) != 0) { err = errno; - cancel_receive (); + if (r == -1) /* if r == 0, file transfer ended already */ + cancel_receive (); errno = err; reply_with_perror ("pclose: %s", dir); return -1; diff --git a/daemon/upload.c b/daemon/upload.c index e15eadefd..65c66675f 100644 --- a/daemon/upload.c +++ b/daemon/upload.c @@ -77,7 +77,8 @@ do_upload (const char *filename) if (close (fd) == -1) { err = errno; - cancel_receive (); + if (r == -1) /* if r == 0, file transfer ended already */ + cancel_receive (); errno = err; reply_with_perror ("close: %s", filename); return -1;