By using g_hash_table_new_full() we can unref its value which is the SpiceFileTransferTask. This makes the code a little bit simpler as nowhere we use the xfer-task after removing it from hash table. --- src/channel-main.c | 4 ---- src/spice-file-transfer-task.c | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/channel-main.c b/src/channel-main.c index d9fd025..14ad6cf 100644 --- a/src/channel-main.c +++ b/src/channel-main.c @@ -2894,8 +2894,6 @@ static void file_transfer_operation_free(FileTransferOperation *xfer_op) g_task_return_boolean(xfer_op->task, TRUE); } g_object_unref(xfer_op->task); - - /* SpiceFileTransferTask itself is freed after it emits "finish" */ g_hash_table_unref(xfer_op->xfer_task); spice_debug("Freeing file-transfer-operation %p", xfer_op); @@ -2966,7 +2964,6 @@ static void file_transfer_operation_task_finished(SpiceFileTransferTask *xfer_ta /* Likely the operation has ended before the remove-task was called. One * situation that this can easily happen is if the agent is disconnected * while there are pending files. */ - g_object_unref(xfer_task); return; } @@ -2989,7 +2986,6 @@ static void file_transfer_operation_task_finished(SpiceFileTransferTask *xfer_ta /* Remove and free SpiceFileTransferTask */ g_hash_table_remove(xfer_op->xfer_task, GUINT_TO_POINTER(task_id)); - g_object_unref(xfer_task); /* Keep file_xfer_tasks up to date. If no more elements, operation is over */ g_hash_table_remove(channel->priv->file_xfer_tasks, GUINT_TO_POINTER(task_id)); diff --git a/src/spice-file-transfer-task.c b/src/spice-file-transfer-task.c index d97d78c..70c6419 100644 --- a/src/spice-file-transfer-task.c +++ b/src/spice-file-transfer-task.c @@ -362,7 +362,7 @@ GHashTable *spice_file_transfer_task_create_tasks(GFile **files, g_return_val_if_fail(files != NULL && files[0] != NULL, NULL); - xfer_ht = g_hash_table_new(g_direct_hash, g_direct_equal); + xfer_ht = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_object_unref); for (i = 0; files[i] != NULL && !g_cancellable_is_cancelled(cancellable); i++) { SpiceFileTransferTask *xfer_task; guint32 task_id; -- 2.7.4 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel