[Spice-devel] [PATCH spice-gtk v2 1/2] Fix progress monitoring in spice_main_file_copy_async
Victor Toso
lists at victortoso.com
Tue Oct 6 00:22:22 PDT 2015
Hi,
On Mon, Oct 05, 2015 at 01:39:54PM -0500, Jonathon Jongsma wrote:
> spice_main_file_copy_async() allows you to pass a NULL-terminated array
> of files to transfer to the guest. It also allows you to pass a
> progress_callback function to monitor the progress of the transfer, but
> this progress callback is called separately for each file that is
> transferred, and there are no parameters that allow the caller to
> determine which file a given callback corresponds to. This makes it very
> difficult to monitor the progress.
>
> To make this more usable, I've changed it so that the progress callback
> doesn't simply report the number of bytes read and total size of the
> current file. Instead, every we add up the status of all current
"every time" ?
> transfers and report that in the callback.
> ---
> src/channel-main.c | 22 +++++++++++++++++++---
> 1 file changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/src/channel-main.c b/src/channel-main.c
> index cfc8d33..ce0e151 100644
> --- a/src/channel-main.c
> +++ b/src/channel-main.c
> @@ -1789,9 +1789,25 @@ static void file_xfer_data_flushed_cb(GObject *source_object,
> }
> }
>
> - if (task->progress_callback)
> - task->progress_callback(task->read_bytes, task->file_size,
> - task->progress_callback_data);
> + if (task->progress_callback) {
> + goffset read = 0;
> + goffset total = 0;
> + SpiceMainChannel *main_channel = task->channel;
> + GHashTableIter iter;
> + gpointer key, value;
> +
> + /* since the progress_callback does not have a parameter to indicate
> + * which file the progress is associated with, report progress on all
> + * current transfers */
> + g_hash_table_iter_init(&iter, main_channel->priv->file_xfer_tasks);
> + while (g_hash_table_iter_next(&iter, &key, &value)) {
> + SpiceFileXferTask *t = (SpiceFileXferTask *)value;
> + read += t->read_bytes;
> + total += t->file_size;
> + }
> +
> + task->progress_callback(read, total, task->progress_callback_data);
> + }
>
> /* Read more data */
> file_xfer_continue_read(task);
> --
> 2.1.0
This seems fine by me. It would be good to add some info in the doc of
spice_main_file_copy_async function so if one has problem with this
changes the documentation can provide information about it.
cheers,
toso
More information about the Spice-devel
mailing list