From: Victor Toso <me@xxxxxxxxxxxxxx> Using g_hash_table_iter_init() and g_hash_table_iter_next() here is bad as spice_file_transfer_task_completed() will emit "finished" signal from SpiceFileTransferTask resulting in the original GHashTable to be changed in file_transfer_operation_task_finished() Debug will show: GSpice-DEBUG: spice-file-transfer-task.c:303 File bigfile2 xfer failed: Agent connection closed WARNING **: Agent connection closed GLib-CRITICAL **: g_hash_table_iter_next: assertion 'ri->version == ri->hash_table->version' failed Reported-by: Pavel Grunt <pgrunt@xxxxxxxxxx> Signed-off-by: Victor Toso <victortoso@xxxxxxxxxx> --- src/channel-main.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/channel-main.c b/src/channel-main.c index ed5d611..7e7dd28 100644 --- a/src/channel-main.c +++ b/src/channel-main.c @@ -2915,19 +2915,23 @@ static void file_transfer_operation_free(FileTransferOperation *xfer_op) static void spice_main_channel_reset_all_xfer_operations(SpiceMainChannel *channel) { - GHashTableIter iter_all_xfer_tasks; - gpointer key, value; + GList *it, *keys; /* Mark each of SpiceFileTransferTask as completed due error */ - g_hash_table_iter_init(&iter_all_xfer_tasks, channel->priv->file_xfer_tasks); - while (g_hash_table_iter_next(&iter_all_xfer_tasks, &key, &value)) { - FileTransferOperation *xfer_op = value; - SpiceFileTransferTask *xfer_task = g_hash_table_lookup(xfer_op->xfer_task, key); + keys = g_hash_table_get_keys(channel->priv->file_xfer_tasks); + for (it = keys; it != NULL; it = it->next) { + FileTransferOperation *xfer_op; + SpiceFileTransferTask *xfer_task; GError *error; + xfer_op = g_hash_table_lookup(channel->priv->file_xfer_tasks, it->data); + if (xfer_op == NULL) + continue; + + xfer_task = g_hash_table_lookup(xfer_op->xfer_task, it->data); if (xfer_task == NULL) { spice_warning("(reset-all) can't complete task %u - completed already?", - GPOINTER_TO_UINT(key)); + GPOINTER_TO_UINT(it->data)); continue; } -- 2.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel