As pointed out by Yonit on the ML: > (1) the palette cache shouldn't be shared among the display channels. I.e., > there should be one instance per channel, and not one instance in > spice-session. --- gtk/channel-display.c | 4 +++- gtk/spice-session-priv.h | 1 - gtk/spice-session.c | 6 ------ 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/gtk/channel-display.c b/gtk/channel-display.c index 0af3859..794f4eb 100644 --- a/gtk/channel-display.c +++ b/gtk/channel-display.c @@ -144,6 +144,7 @@ static void spice_display_channel_finalize(GObject *object) clear_surfaces(SPICE_CHANNEL(object), FALSE); g_hash_table_unref(c->surfaces); clear_streams(SPICE_CHANNEL(object)); + g_clear_pointer(&c->palettes, cache_unref); if (G_OBJECT_CLASS(spice_display_channel_parent_class)->finalize) G_OBJECT_CLASS(spice_display_channel_parent_class)->finalize(object); @@ -155,7 +156,8 @@ static void spice_display_channel_constructed(GObject *object) SpiceSession *s = spice_channel_get_session(SPICE_CHANNEL(object)); g_return_if_fail(s != NULL); - spice_session_get_caches(s, &c->images, &c->palettes, &c->glz_window); + spice_session_get_caches(s, &c->images, &c->glz_window); + c->palettes = cache_new(g_free); g_return_if_fail(c->glz_window != NULL); g_return_if_fail(c->images != NULL); diff --git a/gtk/spice-session-priv.h b/gtk/spice-session-priv.h index e175281..55fee47 100644 --- a/gtk/spice-session-priv.h +++ b/gtk/spice-session-priv.h @@ -147,7 +147,6 @@ void spice_session_set_caches_hints(SpiceSession *session, uint32_t display_channels_count); void spice_session_get_caches(SpiceSession *session, display_cache **images, - display_cache **palettes, SpiceGlzDecoderWindow **glz_window); void spice_session_palettes_clear(SpiceSession *session); void spice_session_images_clear(SpiceSession *session); diff --git a/gtk/spice-session.c b/gtk/spice-session.c index c050266..79a13de 100644 --- a/gtk/spice-session.c +++ b/gtk/spice-session.c @@ -177,7 +177,6 @@ static void spice_session_init(SpiceSession *session) ring_init(&s->channels); s->images = cache_new((GDestroyNotify)pixman_image_unref); - s->palettes = cache_new(g_free); s->glz_window = glz_decoder_window_new(); update_proxy(session, NULL); } @@ -239,7 +238,6 @@ spice_session_finalize(GObject *gobject) g_strfreev(s->secure_channels); g_clear_pointer(&s->images, cache_unref); - g_clear_pointer(&s->palettes, cache_unref); glz_decoder_window_destroy(s->glz_window); g_clear_pointer(&s->pubkey, g_byte_array_unref); @@ -1308,7 +1306,6 @@ static void cache_clear_all(SpiceSession *self) SpiceSessionPrivate *s = SPICE_SESSION_GET_PRIVATE(self); cache_clear(s->images); - cache_clear(s->palettes); glz_decoder_window_clear(s->glz_window); } @@ -2087,7 +2084,6 @@ const gchar* spice_session_get_ca_file(SpiceSession *session) G_GNUC_INTERNAL void spice_session_get_caches(SpiceSession *session, display_cache **images, - display_cache **palettes, SpiceGlzDecoderWindow **glz_window) { SpiceSessionPrivate *s = SPICE_SESSION_GET_PRIVATE(session); @@ -2096,8 +2092,6 @@ void spice_session_get_caches(SpiceSession *session, if (images) *images = s->images; - if (palettes) - *palettes = s->palettes; if (glz_window) *glz_window = s->glz_window; } -- 1.8.3.1 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel