display-channel: Check that all structure are destroyed during finalize

The leak detector we use currently is not enough to detect
some kind of leak in DisplayChannel so manually test.
These tests are enabled only when --enable-extra-checks is passed
to configure.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
This commit is contained in:
Frediano Ziglio 2017-02-28 11:11:56 +00:00
parent 3a5007d18f
commit 8cdea23d1d
2 changed files with 27 additions and 0 deletions

View File

@ -247,6 +247,9 @@ AC_ARG_ENABLE([extra-checks],
AS_HELP_STRING([--enable-extra-checks=@<:@yes/no@:>@],
[Enable expensive checks @<:@default=no@:>@]))
AM_CONDITIONAL(ENABLE_EXTRA_CHECKS, test "$enable_extra_checks" = "yes")
AC_DEFINE_UNQUOTED([ENABLE_EXTRA_CHECKS],
[$(test "x$enable_extra_checks" = xyes && echo 1 || echo 0)],
[Define to 1 to enable extra checks on code otherwise define to 0])
dnl ===========================================================================
dnl check compiler flags

View File

@ -80,6 +80,30 @@ display_channel_finalize(GObject *object)
display_channel_destroy_surfaces(self);
image_cache_reset(&self->priv->image_cache);
if (ENABLE_EXTRA_CHECKS) {
unsigned int count;
_Drawable *drawable;
Stream *stream;
count = 0;
for (drawable = self->priv->free_drawables; drawable; drawable = drawable->u.next) {
++count;
}
spice_assert(count == NUM_DRAWABLES);
count = 0;
for (stream = self->priv->free_streams; stream; stream = stream->next) {
++count;
}
spice_assert(count == NUM_STREAMS);
spice_assert(ring_is_empty(&self->priv->streams));
for (count = 0; count < NUM_SURFACES; ++count) {
spice_assert(self->priv->surfaces[count].context.canvas == NULL);
}
}
monitors_config_unref(self->priv->monitors_config);
g_array_unref(self->priv->video_codecs);
g_free(self->priv);