changeset 29125:18667ce1f55d

The current behavior of libpurple reports completions of a file transfer too soon. The -completed signal is emitted before the sent bytes counter is updated which means anything relaying on that will get confused (the file transfer is indeed completed) but the number of transferred bytes will be incorrect at the moment of the signal emission. This patch aims to correct that. Fixes #10119. committer: John Bailey <rekkanoryo@rekkanoryo.org>
author foufou33@gmail.com
date Mon, 12 Oct 2009 18:48:19 +0000
parents 51c5cbc0d325
children 4558a09a08c7
files libpurple/ft.c
diffstat 1 files changed, 4 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/ft.c	Mon Oct 12 18:41:51 2009 +0000
+++ b/libpurple/ft.c	Mon Oct 12 18:48:19 2009 +0000
@@ -981,8 +981,6 @@
 		r = write(xfer->fd, buffer, s);
 		if (r < 0 && errno == EAGAIN)
 			r = 0;
-		if ((purple_xfer_get_bytes_sent(xfer)+r) >= purple_xfer_get_size(xfer))
-			purple_xfer_set_completed(xfer, TRUE);
 	}
 
 	return r;
@@ -1013,9 +1011,6 @@
 				return;
 			}
 
-			if ((purple_xfer_get_size(xfer) > 0) &&
-				((purple_xfer_get_bytes_sent(xfer)+r) >= purple_xfer_get_size(xfer)))
-				purple_xfer_set_completed(xfer, TRUE);
 		} else if(r < 0) {
 			purple_xfer_cancel_remote(xfer);
 			g_free(buffer);
@@ -1129,8 +1124,11 @@
 				purple_xfer_get_progress(xfer));
 	}
 
-	if (purple_xfer_is_completed(xfer))
+	if ((purple_xfer_get_size(xfer) > 0) &&		
+              	((purple_xfer_get_bytes_sent(xfer)) >= purple_xfer_get_size(xfer))) {		
+		purple_xfer_set_completed(xfer, TRUE);
 		purple_xfer_end(xfer);
+	}
 }
 
 static void