[Spice-devel] [spice-gtk v4 10/24] file-xfer: improve helper function to queue agent message
Jonathon Jongsma
jjongsma at redhat.com
Fri Jun 24 20:04:03 UTC 2016
On Thu, 2016-06-23 at 19:37 +0200, Victor Toso wrote:
> file_xfer_queue() function belongs to channel-main so it should not
> access SpiceFileTransferTask private struct (self->buffer).
>
> This patch changes:
> * rename function: file_xfer_queue -> file_xfer_queue_msg_to_agent
> As it makes more clear what this helper function does;
> * rename variabale: self -> xfer_task
variable
> As this is not a SpiceFileTransferTask' function.
> * Use buffer provided by spice_file_transfer_task_read_finish()
> instead of accessing SpiceFileTransferTask's private structure
>
> This change is related to split SpiceFileTransferTask from
> channel-main.
> ---
> src/channel-main.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/src/channel-main.c b/src/channel-main.c
> index fef72cd..e57ee73 100644
> --- a/src/channel-main.c
> +++ b/src/channel-main.c
> @@ -1935,19 +1935,19 @@ static void file_xfer_data_flushed_cb(GObject
> *source_object,
> spice_file_transfer_task_read_async(self, file_xfer_read_async_cb, NULL);
> }
>
> -static void file_xfer_queue(SpiceFileTransferTask *self, int data_size)
> +static void file_xfer_queue_msg_to_agent(SpiceFileTransferTask *xfer_task,
> gchar *buffer, int data_size)
> {
> VDAgentFileXferDataMessage msg;
> SpiceMainChannel *channel;
>
> - channel = spice_file_transfer_task_get_channel(self);
> + channel = spice_file_transfer_task_get_channel(xfer_task);
> g_return_if_fail(channel != NULL);
>
> - msg.id = spice_file_transfer_task_get_id(self);
> + msg.id = spice_file_transfer_task_get_id(xfer_task);
> msg.size = data_size;
> agent_msg_queue_many(channel, VD_AGENT_FILE_XFER_DATA,
> &msg, sizeof(msg),
> - self->buffer, data_size, NULL);
> + buffer, data_size, NULL);
> spice_channel_wakeup(SPICE_CHANNEL(channel), FALSE);
> }
>
> @@ -1973,7 +1973,7 @@ static void file_xfer_read_async_cb(GObject
> *source_object,
> return;
> }
>
> - file_xfer_queue(xfer_task, count);
> + file_xfer_queue_msg_to_agent(xfer_task, buffer, count);
> if (count == 0)
> /* on EOF just wait for VD_AGENT_FILE_XFER_STATUS from agent */
> return;
Looks fine, but personally I'm not sure that we really even need a separate
function for this. It's only called from a single place, and it's a very small
function. If we just moved the code into the calling function, we'd probably end
up with smaller and more-readable code and wouldn't need to worry about the
function name, etc.
Another alternative is something like:
static void file_xfer_queue_msg_to_agent(SpiceMainChannel*, guint32 task_id,
gchar *buffer, int data_size)
It feels a bit awkward to me to pass the SpiceFileTransferTask to this function
and then just extract a couple pieces of data from it.
But even so, this is an improvement over the current code, so if you want to
keep it this way, I won't argue.
Reviewed-by: Jonathon Jongsma <jjongsma at redhat.com>
More information about the Spice-devel
mailing list