[Spice-devel] [PATCH] egl: fix leak when display is unrealize

Victor Toso lists at victortoso.com
Tue Mar 29 20:55:07 UTC 2016


Hi,

On Tue, Mar 29, 2016 at 09:55:53AM -0400, Marc-André Lureau wrote:
> ack (that makes me wonder if we should have a global EGLDisplay instead of each widget).

Pushed!
https://cgit.freedesktop.org/spice/spice-gtk/commit/?id=181ec2511902483

> 
> ----- Original Message -----
> > eglTerminate should be called on unrealize. This not yet fix all the
> > leaks but reduces it significantly from 318kb to 74kb as definitely lost
> > and around 1mb to 8kb as indirectly lost.
> > 
> > 4,096 bytes in 1 blocks are definitely lost in loss record
> > 9,762 of 9,882
> >    at 0x35B19E40: drm_intel_gem_bo_map (intel_bufmgr_gem.c:1454)
> >    by 0x35688320: can_write_oacontrol (intel_extensions.c:121)
> >    by 0x35688320: intelInitExtensions (intel_extensions.c:279)
> >    by 0x35651380: brwCreateContext (brw_context.c:875)
> >    by 0x35602720: driCreateContextAttribs (dri_util.c:426)
> >    by 0xF0C48B1: dri2_create_context (egl_dri2.c:1072)
> >    by 0xF0BE727: eglCreateContext (eglapi.c:638)
> >    by 0x5461D27: spice_egl_init (spice-widget-egl.c:256)
> >    by 0x545B885: drawing_area_realize (spice-widget.c:581)
> >    by 0xB431784: g_closure_invoke (gclosure.c:804)
> >    by 0xB443A40: signal_emit_unlocked_R (gsignal.c:3629)
> >    by 0xB44C92E: g_signal_emit_valist (gsignal.c:3385)
> >    by 0xB44CC51: g_signal_emit (gsignal.c:3441)
> > 
> > 4,856 (32 direct, 4,824 indirect) bytes in 1 blocks are definitely lost
> > in loss record 9,779 of 9,882
> >    at 0x4C2A988: calloc (vg_replace_malloc.c:711)
> >    by 0xF0BEEF7: _eglCreateArray (eglarray.c:71)
> >    by 0xF0BF420: _eglLinkConfig (eglconfig.c:90)
> >    by 0xF0C4F8D: dri2_add_config (egl_dri2.c:307)
> >    by 0xF0C66EE: dri2_x11_add_configs_for_visuals (platform_x11.c:766)
> >    by 0xF0C80EC: dri2_initialize_x11_dri3 (platform_x11.c:1319)
> >    by 0xF0C80EC: dri2_initialize_x11 (platform_x11.c:1464)
> >    by 0xF0C18FE: _eglMatchAndInitialize (egldriver.c:261)
> >    by 0xF0C19B8: _eglMatchDriver (egldriver.c:292)
> >    by 0xF0BDD31: eglInitialize (eglapi.c:482)
> >    by 0x5461A76: spice_egl_init (spice-widget-egl.c:226)
> >    by 0x545B885: drawing_area_realize (spice-widget.c:581)
> >    by 0xB431784: g_closure_invoke (gclosure.c:804)
> > 
> > 5,921 (472 direct, 5,449 indirect) bytes in 1 blocks are definitely lost
> > in loss record 9,794 of 9,882
> >    at 0x4C2A988: calloc (vg_replace_malloc.c:711)
> >    by 0xF0C7E0E: dri2_initialize_x11_dri3 (platform_x11.c:1267)
> >    by 0xF0C7E0E: dri2_initialize_x11 (platform_x11.c:1464)
> >    by 0xF0C18FE: _eglMatchAndInitialize (egldriver.c:261)
> >    by 0xF0C19B8: _eglMatchDriver (egldriver.c:292)
> >    by 0xF0BDD31: eglInitialize (eglapi.c:482)
> >    by 0x5461A76: spice_egl_init (spice-widget-egl.c:226)
> >    by 0x545B885: drawing_area_realize (spice-widget.c:581)
> >    by 0xB431784: g_closure_invoke (gclosure.c:804)
> >    by 0xB443A40: signal_emit_unlocked_R (gsignal.c:3629)
> >    by 0xB44C92E: g_signal_emit_valist (gsignal.c:3385)
> >    by 0xB44CC51: g_signal_emit (gsignal.c:3441)
> >    by 0x5D2C9DB: gtk_widget_realize (gtkwidget.c:5454)
> > 
> > 16,384 bytes in 4 blocks are definitely lost in loss record 9,854 of 9,882
> >    at 0x35B19E40: drm_intel_gem_bo_map (intel_bufmgr_gem.c:1454)
> >    by 0x3568AB30: intel_miptree_map_raw (intel_mipmap_tree.c:2149)
> >    by 0x3568CEE6: intel_miptree_map_gtt (intel_mipmap_tree.c:2182)
> >    by 0x3568CEE6: intel_miptree_map (intel_mipmap_tree.c:2774)
> >    by 0x35692851: intel_map_texture_image (intel_tex.c:227)
> >    by 0x35447C3B: store_texsubimage (texstore.c:1069)
> >    by 0x35447E9F: _mesa_store_teximage (texstore.c:1125)
> >    by 0x3543D9BA: _mesa_get_fallback_texture (texobj.c:1056)
> >    by 0x35443E1E: UnknownInlinedFun (texstate.c:562)
> >    by 0x35443E1E: update_program_texture_state (texstate.c:587)
> >    by 0x35443E1E: UnknownInlinedFun (texstate.c:726)
> >    by 0x35443E1E: _mesa_update_texture (texstate.c:757)
> >    by 0x35420809: _mesa_update_state_locked (state.c:430)
> >    by 0x35420ED0: _mesa_update_state (state.c:504)
> >    by 0x3535BF87: _mesa_Clear (clear.c:172)
> >    by 0x546214F: spice_egl_update_display (spice-widget-egl.c:514)
> > 
> > 32,768 bytes in 1 blocks are definitely lost in loss record 9,864 of 9,882
> >    at 0x35B19E40: drm_intel_gem_bo_map (intel_bufmgr_gem.c:1454)
> >    by 0x35683E3C: intel_batchbuffer_reset (intel_batchbuffer.c:68)
> >    by 0x35684052: brw_new_batch (intel_batchbuffer.c:164)
> >    by 0x35684052: _intel_batchbuffer_flush.part.2 (intel_batchbuffer.c:397)
> >    by 0x3568853B: can_write_oacontrol (intel_extensions.c:153)
> >    by 0x3568853B: intelInitExtensions (intel_extensions.c:279)
> >    by 0x35651380: brwCreateContext (brw_context.c:875)
> >    by 0x35602720: driCreateContextAttribs (dri_util.c:426)
> >    by 0xF0C48B1: dri2_create_context (egl_dri2.c:1072)
> >    by 0xF0BE727: eglCreateContext (eglapi.c:638)
> >    by 0x5461D27: spice_egl_init (spice-widget-egl.c:256)
> >    by 0x545B885: drawing_area_realize (spice-widget.c:581)
> >    by 0xB431784: g_closure_invoke (gclosure.c:804)
> >    by 0xB443A40: signal_emit_unlocked_R (gsignal.c:3629)
> > 
> > 32,768 bytes in 1 blocks are definitely lost in loss record 9,865 of 9,882
> >    at 0x35B19E40: drm_intel_gem_bo_map (intel_bufmgr_gem.c:1454)
> >    by 0x35683E3C: intel_batchbuffer_reset (intel_batchbuffer.c:68)
> >    by 0x35684052: brw_new_batch (intel_batchbuffer.c:164)
> >    by 0x35684052: _intel_batchbuffer_flush.part.2 (intel_batchbuffer.c:397)
> >    by 0x356887F3: can_do_pipelined_register_writes (intel_extensions.c:88)
> >    by 0x356887F3: intelInitExtensions (intel_extensions.c:338)
> >    by 0x35651380: brwCreateContext (brw_context.c:875)
> >    by 0x35602720: driCreateContextAttribs (dri_util.c:426)
> >    by 0xF0C48B1: dri2_create_context (egl_dri2.c:1072)
> >    by 0xF0BE727: eglCreateContext (eglapi.c:638)
> >    by 0x5461D27: spice_egl_init (spice-widget-egl.c:256)
> >    by 0x545B885: drawing_area_realize (spice-widget.c:581)
> >    by 0xB431784: g_closure_invoke (gclosure.c:804)
> >    by 0xB443A40: signal_emit_unlocked_R (gsignal.c:3629)
> > 
> > 98,304 bytes in 3 blocks are definitely lost in loss record 9,872 of 9,882
> >    at 0x35B19E40: drm_intel_gem_bo_map (intel_bufmgr_gem.c:1454)
> >    by 0x35683E3C: intel_batchbuffer_reset (intel_batchbuffer.c:68)
> >    by 0x35684052: brw_new_batch (intel_batchbuffer.c:164)
> >    by 0x35684052: _intel_batchbuffer_flush.part.2 (intel_batchbuffer.c:397)
> >    by 0x3564F834: intel_glFlush (brw_context.c:259)
> >    by 0xF0C3DA0: dri2_make_current (egl_dri2.c:1189)
> >    by 0xF0BAB1B: eglMakeCurrent (eglapi.c:703)
> >    by 0x546274E: spice_widget_init_egl_win (spice-widget-egl.c:316)
> >    by 0x546274E: spice_egl_realize_display (spice-widget-egl.c:333)
> >    by 0x545B89F: drawing_area_realize (spice-widget.c:586)
> >    by 0xB431784: g_closure_invoke (gclosure.c:804)
> >    by 0xB443A40: signal_emit_unlocked_R (gsignal.c:3629)
> >    by 0xB44C92E: g_signal_emit_valist (gsignal.c:3385)
> >    by 0xB44CC51: g_signal_emit (gsignal.c:3441)
> > 
> > 131,072 bytes in 4 blocks are definitely lost in loss record 9,874 of 9,882
> >    at 0x35B19E40: drm_intel_gem_bo_map (intel_bufmgr_gem.c:1454)
> >    by 0x35683E3C: intel_batchbuffer_reset (intel_batchbuffer.c:68)
> >    by 0x356848E8: intel_batchbuffer_init (intel_batchbuffer.c:45)
> >    by 0x35651337: brwCreateContext (brw_context.c:848)
> >    by 0x35602720: driCreateContextAttribs (dri_util.c:426)
> >    by 0xF0C48B1: dri2_create_context (egl_dri2.c:1072)
> >    by 0xF0BE727: eglCreateContext (eglapi.c:638)
> >    by 0x5461D27: spice_egl_init (spice-widget-egl.c:256)
> >    by 0x545B885: drawing_area_realize (spice-widget.c:581)
> >    by 0xB431784: g_closure_invoke (gclosure.c:804)
> >    by 0xB443A40: signal_emit_unlocked_R (gsignal.c:3629)
> >    by 0xB44C92E: g_signal_emit_valist (gsignal.c:3385)
> > 
> > 1,080,655 (284 direct, 1,080,371 indirect) bytes in 1 blocks are
> > definitely lost in loss record 9,881 of 9,882
> >    at 0x4C2A988: calloc (vg_replace_malloc.c:711)
> >    by 0x355A2221: ralloc_size (ralloc.c:113)
> >    by 0x355A227D: rzalloc_size (ralloc.c:134)
> >    by 0x355A2BEE: ra_alloc_reg_set (register_allocate.c:196)
> >    by 0x356D79AA: brw_alloc_reg_set(brw_compiler*, int)
> >    (brw_fs_reg_allocate.cpp:159)
> >    by 0x356D817D: brw_fs_alloc_reg_sets (brw_fs_reg_allocate.cpp:305)
> >    by 0x356FDACC: brw_compiler_create (brw_shader.cpp:84)
> >    by 0x35691995: intelInitScreen2 (intel_screen.c:1495)
> >    by 0x35602A5E: driCreateNewScreen2 (dri_util.c:144)
> >    by 0xF0C547B: dri2_create_screen (egl_dri2.c:674)
> >    by 0xF0C808F: dri2_initialize_x11_dri3 (platform_x11.c:1303)
> >    by 0xF0C808F: dri2_initialize_x11 (platform_x11.c:1464)
> >    by 0xF0C18FE: _eglMatchAndInitialize (egldriver.c:261)
> > ---
> >  src/spice-widget-egl.c | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/src/spice-widget-egl.c b/src/spice-widget-egl.c
> > index 126269f..51bb5c5 100644
> > --- a/src/spice-widget-egl.c
> > +++ b/src/spice-widget-egl.c
> > @@ -382,6 +382,7 @@ void spice_egl_unrealize_display(SpiceDisplay *display)
> >  
> >      eglMakeCurrent(d->egl.display, EGL_NO_SURFACE, EGL_NO_SURFACE,
> >                     EGL_NO_CONTEXT);
> > +    eglTerminate(d->egl.display);
> >  }
> >  
> >  G_GNUC_INTERNAL
> > --
> > 2.5.5
> > 
> > _______________________________________________
> > Spice-devel mailing list
> > Spice-devel at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/spice-devel
> > 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list