When destroying the primary surface, we need to signal it, since listeners might be referencing the data pointer. Currently, this only happens during channel finalize(). This could help with rhbz#1082555. --- gtk/channel-display.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gtk/channel-display.c b/gtk/channel-display.c index 96fd764..ff9f85c 100644 --- a/gtk/channel-display.c +++ b/gtk/channel-display.c @@ -807,12 +807,18 @@ static display_surface *find_surface(SpiceDisplayChannelPrivate *c, guint32 surf return g_hash_table_lookup(c->surfaces, GINT_TO_POINTER(surface_id)); } +/* main or coroutine context */ static void clear_surfaces(SpiceChannel *channel, gboolean keep_primary) { SpiceDisplayChannelPrivate *c = SPICE_DISPLAY_CHANNEL(channel)->priv; GHashTableIter iter; display_surface *surface; + if (!keep_primary) { + c->primary = NULL; + emit_main_context(channel, SPICE_DISPLAY_PRIMARY_DESTROY); + } + g_hash_table_iter_init(&iter, c->surfaces); while (g_hash_table_iter_next(&iter, NULL, (gpointer*)&surface)) { -- 1.8.5.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel