> > A few dispose/finalize implementations were not chaining up to their > parent classes, causing memory leaks. > > This fixes leaks like the following: > > ==16240== Memcheck, a memory error detector > ==16240== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. > ==16240== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info > ==16240== Command: ./test-leaks > ==16240== > ==16240== > ==16240== HEAP SUMMARY: > ==16240== in use at exit: 245,490 bytes in 3,638 blocks > ==16240== total heap usage: 5,418 allocs, 1,780 frees, 17,676,968 bytes > allocated > ==16240== > ==16240== 16 bytes in 1 blocks are definitely lost in loss record 203 of 771 > ==16240== at 0x4C2DADE: malloc (vg_replace_malloc.c:298) > ==16240== by 0x4C2FC91: realloc (vg_replace_malloc.c:785) > ==16240== by 0x52864E: dispatcher_register_handler (dispatcher.c:374) > ==16240== by 0x5293E0: main_dispatcher_constructed (main-dispatcher.c:315) > ==16240== by 0x7F873DB: g_object_new_internal (gobject.c:1823) > ==16240== by 0x7F87EE4: g_object_new_valist (gobject.c:2042) > ==16240== by 0x7F86E90: g_object_new (gobject.c:1626) > ==16240== by 0x5292A5: main_dispatcher_new (main-dispatcher.c:295) > ==16240== by 0x429A0A: do_spice_init (reds.c:3416) > ==16240== by 0x42A3F5: spice_server_init (reds.c:3663) > ==16240== by 0x4095B1: server_leaks (test-leaks.c:45) > ==16240== by 0x844C60A: test_case_run (gtestutils.c:2161) > ==16240== by 0x844C9CA: g_test_run_suite_internal (gtestutils.c:2244) > ==16240== by 0x844CA73: g_test_run_suite_internal (gtestutils.c:2256) > ==16240== by 0x844CC8A: g_test_run_suite (gtestutils.c:2332) > ==16240== by 0x844B92C: g_test_run (gtestutils.c:1599) > ==16240== by 0x409A0B: main (test-leaks.c:126) > ==16240== > ==16240== 16 bytes in 1 blocks are definitely lost in loss record 204 of 771 > ==16240== at 0x4C2DADE: malloc (vg_replace_malloc.c:298) > ==16240== by 0x4C2FC91: realloc (vg_replace_malloc.c:785) > ==16240== by 0x52864E: dispatcher_register_handler (dispatcher.c:374) > ==16240== by 0x5293E0: main_dispatcher_constructed (main-dispatcher.c:315) > ==16240== by 0x7F873DB: g_object_new_internal (gobject.c:1823) > ==16240== by 0x7F87EE4: g_object_new_valist (gobject.c:2042) > ==16240== by 0x7F86E90: g_object_new (gobject.c:1626) > ==16240== by 0x5292A5: main_dispatcher_new (main-dispatcher.c:295) > ==16240== by 0x429A0A: do_spice_init (reds.c:3416) > ==16240== by 0x42A3F5: spice_server_init (reds.c:3663) > ==16240== by 0x40BFD4: test_new (test-display-base.c:902) > ==16240== by 0x40979D: vmc_leaks (test-leaks.c:92) > ==16240== by 0x844C60A: test_case_run (gtestutils.c:2161) > ==16240== by 0x844C9CA: g_test_run_suite_internal (gtestutils.c:2244) > ==16240== by 0x844CA73: g_test_run_suite_internal (gtestutils.c:2256) > ==16240== by 0x844CC8A: g_test_run_suite (gtestutils.c:2332) > ==16240== by 0x844B92C: g_test_run (gtestutils.c:1599) > ==16240== by 0x409A0B: main (test-leaks.c:126) > ==16240== > ==16240== 96 bytes in 1 blocks are definitely lost in loss record 638 of 771 > ==16240== at 0x4C2FA50: calloc (vg_replace_malloc.c:711) > ==16240== by 0x8427D3C: g_malloc0 (gmem.c:124) > ==16240== by 0x842801F: g_malloc0_n (gmem.c:355) > ==16240== by 0x527B44: dispatcher_constructed (dispatcher.c:141) > ==16240== by 0x529321: main_dispatcher_constructed (main-dispatcher.c:307) > ==16240== by 0x7F873DB: g_object_new_internal (gobject.c:1823) > ==16240== by 0x7F87EE4: g_object_new_valist (gobject.c:2042) > ==16240== by 0x7F86E90: g_object_new (gobject.c:1626) > ==16240== by 0x5292A5: main_dispatcher_new (main-dispatcher.c:295) > ==16240== by 0x429A0A: do_spice_init (reds.c:3416) > ==16240== by 0x42A3F5: spice_server_init (reds.c:3663) > ==16240== by 0x4095B1: server_leaks (test-leaks.c:45) > ==16240== by 0x844C60A: test_case_run (gtestutils.c:2161) > ==16240== by 0x844C9CA: g_test_run_suite_internal (gtestutils.c:2244) > ==16240== by 0x844CA73: g_test_run_suite_internal (gtestutils.c:2256) > ==16240== by 0x844CC8A: g_test_run_suite (gtestutils.c:2332) > ==16240== by 0x844B92C: g_test_run (gtestutils.c:1599) > ==16240== by 0x409A0B: main (test-leaks.c:126) > ==16240== > ==16240== 96 bytes in 1 blocks are definitely lost in loss record 639 of 771 > ==16240== at 0x4C2FA50: calloc (vg_replace_malloc.c:711) > ==16240== by 0x8427D3C: g_malloc0 (gmem.c:124) > ==16240== by 0x842801F: g_malloc0_n (gmem.c:355) > ==16240== by 0x527B44: dispatcher_constructed (dispatcher.c:141) > ==16240== by 0x529321: main_dispatcher_constructed (main-dispatcher.c:307) > ==16240== by 0x7F873DB: g_object_new_internal (gobject.c:1823) > ==16240== by 0x7F87EE4: g_object_new_valist (gobject.c:2042) > ==16240== by 0x7F86E90: g_object_new (gobject.c:1626) > ==16240== by 0x5292A5: main_dispatcher_new (main-dispatcher.c:295) > ==16240== by 0x429A0A: do_spice_init (reds.c:3416) > ==16240== by 0x42A3F5: spice_server_init (reds.c:3663) > ==16240== by 0x40BFD4: test_new (test-display-base.c:902) > ==16240== by 0x40979D: vmc_leaks (test-leaks.c:92) > ==16240== by 0x844C60A: test_case_run (gtestutils.c:2161) > ==16240== by 0x844C9CA: g_test_run_suite_internal (gtestutils.c:2244) > ==16240== by 0x844CA73: g_test_run_suite_internal (gtestutils.c:2256) > ==16240== by 0x844CC8A: g_test_run_suite (gtestutils.c:2332) > ==16240== by 0x844B92C: g_test_run (gtestutils.c:1599) > ==16240== by 0x409A0B: main (test-leaks.c:126) > ==16240== > ==16240== LEAK SUMMARY: > ==16240== definitely lost: 224 bytes in 4 blocks > ==16240== indirectly lost: 0 bytes in 0 blocks > ==16240== possibly lost: 0 bytes in 0 blocks > ==16240== still reachable: 207,718 bytes in 3,312 blocks > ==16240== of which reachable via heuristic: > ==16240== newarray : 1,536 bytes in 16 > blocks > ==16240== suppressed: 34,548 bytes in 302 blocks > ==16240== Reachable blocks (those to which a pointer was found) are not > shown. > ==16240== To see them, rerun with: --leak-check=full --show-leak-kinds=all > ==16240== > ==16240== For counts of detected and suppressed errors, rerun with: -v > ==16240== ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 20 from 20) > FAIL test-leaks (exit status: 1) Acked-by: Frediano Ziglio <fziglio@xxxxxxxxxx> Frediano > --- > server/main-dispatcher.c | 1 + > server/reds.c | 2 ++ > server/spicevmc.c | 1 + > 3 files changed, 4 insertions(+) > > diff --git a/server/main-dispatcher.c b/server/main-dispatcher.c > index 51d6004..019bf4d 100644 > --- a/server/main-dispatcher.c > +++ b/server/main-dispatcher.c > @@ -332,4 +332,5 @@ static void main_dispatcher_finalize(GObject *object) > > self->priv->core->watch_remove(self->priv->core, self->priv->watch); > self->priv->watch = NULL; > + G_OBJECT_CLASS(main_dispatcher_parent_class)->finalize(object); > } > diff --git a/server/reds.c b/server/reds.c > index a165a9b..c730daa 100644 > --- a/server/reds.c > +++ b/server/reds.c > @@ -4525,6 +4525,8 @@ red_char_device_vdi_port_finalize(GObject *object) > > free(dev->priv->mig_data); > /* FIXME: need to free the RedVDIReadBuf allocated previously */ > + > + G_OBJECT_CLASS(red_char_device_vdi_port_parent_class)->finalize(object); > } > > static void > diff --git a/server/spicevmc.c b/server/spicevmc.c > index 615e317..623e34f 100644 > --- a/server/spicevmc.c > +++ b/server/spicevmc.c > @@ -914,6 +914,7 @@ red_char_device_spicevmc_dispose(GObject *object) > red_channel_destroy(channel); > self->channel = NULL; > } > + G_OBJECT_CLASS(red_char_device_spicevmc_parent_class)->dispose(object); > } > > enum { > -- > 2.9.3 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/spice-devel > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel