This was originally intended to fix the problem fixed by commit 53488f0275d6c8a121af49f7ac817d09ce68090d. What is left are FOREACH loops that are at less risk and maybe safe (no read/write or disconnect/destroy are called from within them). --- server/red_channel.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/red_channel.c b/server/red_channel.c index 8742008..85d7ebc 100644 --- a/server/red_channel.c +++ b/server/red_channel.c @@ -2025,7 +2025,7 @@ void red_client_set_main(RedClient *client, MainChannelClient *mcc) { void red_client_semi_seamless_migrate_complete(RedClient *client) { - RingItem *link; + RingItem *link, *next; pthread_mutex_lock(&client->lock); if (!client->during_target_migrate || client->seamless_migrate) { @@ -2034,7 +2034,7 @@ void red_client_semi_seamless_migrate_complete(RedClient *client) return; } client->during_target_migrate = FALSE; - RING_FOREACH(link, &client->channels) { + RING_FOREACH_SAFE(link, next, &client->channels) { RedChannelClient *rcc = SPICE_CONTAINEROF(link, RedChannelClient, client_link); if (rcc->latency_monitor.timer) { @@ -2073,12 +2073,12 @@ static void red_channel_pipes_create_batch(RedChannel *channel, new_pipe_item_t creator, void *data, rcc_item_t callback) { - RingItem *link; + RingItem *link, *next; RedChannelClient *rcc; PipeItem *item; int num = 0; - RING_FOREACH(link, &channel->clients) { + RING_FOREACH_SAFE(link, next, &channel->clients) { rcc = SPICE_CONTAINEROF(link, RedChannelClient, channel_link); item = (*creator)(rcc, data, num++); if (callback) { -- 1.7.1 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel