# HG changeset patch # User foufou33@gmail.com # Date 1255373299 0 # Node ID 18667ce1f55d69622bb5ee289fbae14b2334feeb # Parent 51c5cbc0d325af3da4f7c0eeb66898c42f1c30b4 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 diff -r 51c5cbc0d325 -r 18667ce1f55d libpurple/ft.c --- 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