[Spice-devel] [spice-gtk v3 2/2] file-transfer: improve GHashTable with value_destroy_func
Victor Toso
victortoso at redhat.com
Wed Aug 3 14:37:28 UTC 2016
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
More information about the Spice-devel
mailing list