Gtk4 memory leak in the cairo renderer (and other places)
Steps to reproduce
- Configure the git HEAD to be built with address sanitizer enabled:
CFLAGS="-fsanitize=address -fno-omit-frame-pointer" meson setup build
ninja -C build
./build/demos/gtk-demo/gtk4-demo
- Go to
Constraints
>Simple Constraints
>Run
- Manually resize the constraint layout based window by dragging the corner.
- Close both both the constraint based window and gtk-demo window and check the memory leak log in the terminal.
Current behavior
A fair amount of memory gets leaked: around ~70kb. I am used to libfontconfig
not getting cleaned up properly from Gtk3 and Gtk4 and understand this is something related to libfontconfig, according to this discussion at least. Not something I'm too concerned about, as the objects leaked seem to be stable across runs.
What I am more concerned with is the surface_render
> gtk_widget_render
> ...
> cairo_region_create
call chain which seems related to the Gtk4 renderer on X11. The amount of objects leaked by the cairo renderer differs from run to run; seemingly getting triggered randomly on resize and possibly being unbound?
Here is the output of sample run using the instructions mentioned above:
user% ./build/demos/gtk-demo/gtk4-demo [133]
** Message: 15:42:40.875: For syntax highlighting, install the “highlight” program
=================================================================
==109543==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 10240 byte(s) in 16 object(s) allocated from:
#0 0x7f185a2ce07a in __interceptor_realloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:85
#1 0x7f18576dd09b (/usr/lib/libfontconfig.so.1+0x2109b) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Direct leak of 3424 byte(s) in 107 object(s) allocated from:
#0 0x7f185a2cf359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7f185832d36f in cairo_region_create (/usr/lib/libcairo.so.2+0x5536f) (BuildId: a3e7fdcc0b68ba89990354a4e7d1918069b42e5b)
#2 0x7f185959873f in gdk_gl_context_real_begin_frame ../gdk/gdkglcontext.c:623
#3 0x7f185957e1d5 in gdk_draw_context_begin_frame_full ../gdk/gdkdrawcontext.c:381
#4 0x7f18597491dc in gsk_gpu_renderer_render ../gsk/gpu/gskgpurenderer.c:402
#5 0x7f18595ff5cf in gsk_renderer_render ../gsk/gskrenderer.c:508
#6 0x7f18591274bf in gtk_widget_render ../gtk/gtkwidget.c:11971
#7 0x7f185913a324 in surface_render ../gtk/gtkwindow.c:4756
#8 0x7f185949de2d in _gdk_marshal_BOOLEAN__BOXEDv gdk/gdkmarshalers.c:130
#9 0x7f18587a7b72 (/usr/lib/libgobject-2.0.so.0+0x33b72) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
#10 0x7f18587a7c76 in g_signal_emit_valist (/usr/lib/libgobject-2.0.so.0+0x33c76) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
Direct leak of 256 byte(s) in 1 object(s) allocated from:
#0 0x7f185a2cf359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7f18576dcfe5 (/usr/lib/libfontconfig.so.1+0x20fe5) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 26176 byte(s) in 818 object(s) allocated from:
#0 0x7f185a2cf359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7f18576c8a70 (/usr/lib/libfontconfig.so.1+0xca70) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 10111 byte(s) in 786 object(s) allocated from:
#0 0x7f185a25a32a in __interceptor_strdup /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:454
#1 0x7f18576c81d3 (/usr/lib/libfontconfig.so.1+0xc1d3) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 9408 byte(s) in 294 object(s) allocated from:
#0 0x7f185a2cecc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7f18576e13fd (/usr/lib/libfontconfig.so.1+0x253fd) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 6656 byte(s) in 208 object(s) allocated from:
#0 0x7f185a2cecc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7f18576dca9c (/usr/lib/libfontconfig.so.1+0x20a9c) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 1886 byte(s) in 183 object(s) allocated from:
#0 0x7f185a25a32a in __interceptor_strdup /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:454
#1 0x7f18576dc898 in FcValueSave (/usr/lib/libfontconfig.so.1+0x20898) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 1536 byte(s) in 48 object(s) allocated from:
#0 0x7f185a2cecc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7f18576dc950 (/usr/lib/libfontconfig.so.1+0x20950) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 384 byte(s) in 8 object(s) allocated from:
#0 0x7f185a2cf359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7f18576d2b98 in FcLangSetCopy (/usr/lib/libfontconfig.so.1+0x16b98) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
SUMMARY: AddressSanitizer: 70077 byte(s) leaked in 2469 allocation(s).
Expected outcome
No memory to be leaked (at least from the cairo Gtk4 render backend).
Version information
- GTK version: 4.12.4 and git HEAD (0c616106)
- Linux: ArchLinux
6.6.2-arch1-1
- Window manager: i3wm on X11
Additional information
The renderer memory leak can also by triggered by the example application1, which consists of an empty window. It is just a lot harder to reproduce, needing to resize the window more aggressively/longer to hit the memory leak code path compared to a window containing layout constraints. Output of such a run:
user% ./build/examples/application1/exampleapp [1]
=================================================================
==107149==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 3072 byte(s) in 96 object(s) allocated from:
#0 0x7fce3fb67359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7fce3d64d36f in cairo_region_create (/usr/lib/libcairo.so.2+0x5536f) (BuildId: a3e7fdcc0b68ba89990354a4e7d1918069b42e5b)
#2 0x7fce3ee3073f in gdk_gl_context_real_begin_frame ../gdk/gdkglcontext.c:623
#3 0x7fce3ee161d5 in gdk_draw_context_begin_frame_full ../gdk/gdkdrawcontext.c:381
#4 0x7fce3efe11dc in gsk_gpu_renderer_render ../gsk/gpu/gskgpurenderer.c:402
#5 0x7fce3ee975cf in gsk_renderer_render ../gsk/gskrenderer.c:508
#6 0x7fce3e9bf4bf in gtk_widget_render ../gtk/gtkwidget.c:11971
#7 0x7fce3e9d2324 in surface_render ../gtk/gtkwindow.c:4756
#8 0x7fce3ed35e2d in _gdk_marshal_BOOLEAN__BOXEDv gdk/gdkmarshalers.c:130
#9 0x7fce3e03fb72 (/usr/lib/libgobject-2.0.so.0+0x33b72) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
#10 0x7fce3e03fc76 in g_signal_emit_valist (/usr/lib/libgobject-2.0.so.0+0x33c76) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
Direct leak of 256 byte(s) in 1 object(s) allocated from:
#0 0x7fce3fb67359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7fce3d59efe5 (/usr/lib/libfontconfig.so.1+0x20fe5) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 32 byte(s) in 1 object(s) allocated from:
#0 0x7fce3fb66cc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7fce3d5a33fd (/usr/lib/libfontconfig.so.1+0x253fd) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 14 byte(s) in 1 object(s) allocated from:
#0 0x7fce3faf232a in __interceptor_strdup /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:454
#1 0x7fce3d59e898 in FcValueSave (/usr/lib/libfontconfig.so.1+0x20898) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
SUMMARY: AddressSanitizer: 3374 byte(s) leaked in 99 allocation(s).
Toggling full sceen of the Simple Constraints
windows additionally to resizing leaks a bunch more objects all over the place:
user% ./build/demos/gtk-demo/gtk4-demo [1]
** Message: 16:45:11.476: For syntax highlighting, install the “highlight” program
=================================================================
==118456==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 10240 byte(s) in 16 object(s) allocated from:
#0 0x7fd95c5e207a in __interceptor_realloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:85
#1 0x7fd9599ee09b (/usr/lib/libfontconfig.so.1+0x2109b) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Direct leak of 4544 byte(s) in 142 object(s) allocated from:
#0 0x7fd95c5e3359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7fd95a63e36f in cairo_region_create (/usr/lib/libcairo.so.2+0x5536f) (BuildId: a3e7fdcc0b68ba89990354a4e7d1918069b42e5b)
#2 0x7fd95b8ac53f in gdk_gl_context_real_begin_frame ../gdk/gdkglcontext.c:623
#3 0x7fd95b891fd5 in gdk_draw_context_begin_frame_full ../gdk/gdkdrawcontext.c:381
#4 0x7fd95ba5cfdc in gsk_gpu_renderer_render ../gsk/gpu/gskgpurenderer.c:402
#5 0x7fd95b9133cf in gsk_renderer_render ../gsk/gskrenderer.c:508
#6 0x7fd95b4395cf in gtk_widget_render ../gtk/gtkwidget.c:11971
#7 0x7fd95b44c434 in surface_render ../gtk/gtkwindow.c:4756
#8 0x7fd95b7b1c2d in _gdk_marshal_BOOLEAN__BOXEDv gdk/gdkmarshalers.c:130
#9 0x7fd95aab8b72 (/usr/lib/libgobject-2.0.so.0+0x33b72) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
#10 0x7fd95aab8c76 in g_signal_emit_valist (/usr/lib/libgobject-2.0.so.0+0x33c76) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
Direct leak of 3248 byte(s) in 14 object(s) allocated from:
#0 0x7fd95c5e2cc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7fd95ab4b2ba in g_malloc0 (/usr/lib/libglib-2.0.so.0+0x642ba) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
Direct leak of 256 byte(s) in 1 object(s) allocated from:
#0 0x7fd95c5e3359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7fd9599edfe5 (/usr/lib/libfontconfig.so.1+0x20fe5) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 26176 byte(s) in 818 object(s) allocated from:
#0 0x7fd95c5e3359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7fd9599d9a70 (/usr/lib/libfontconfig.so.1+0xca70) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 10111 byte(s) in 786 object(s) allocated from:
#0 0x7fd95c56e32a in __interceptor_strdup /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:454
#1 0x7fd9599d91d3 (/usr/lib/libfontconfig.so.1+0xc1d3) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 9408 byte(s) in 294 object(s) allocated from:
#0 0x7fd95c5e2cc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7fd9599f23fd (/usr/lib/libfontconfig.so.1+0x253fd) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 6656 byte(s) in 208 object(s) allocated from:
#0 0x7fd95c5e2cc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7fd9599eda9c (/usr/lib/libfontconfig.so.1+0x20a9c) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 3360 byte(s) in 42 object(s) allocated from:
#0 0x7fd95c5e2cc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7fd95ab4b2ba in g_malloc0 (/usr/lib/libglib-2.0.so.0+0x642ba) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
Indirect leak of 2688 byte(s) in 112 object(s) allocated from:
#0 0x7fd95c5e2cc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7fd95ab4b2ba in g_malloc0 (/usr/lib/libglib-2.0.so.0+0x642ba) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
#2 0x7fd95b47e4e7 in gtk_accessible_attribute_set_init ../gtk/gtkaccessibleattributeset.c:54
#3 0x7fd95b47e4e7 in gtk_accessible_attribute_set_new ../gtk/gtkaccessibleattributeset.c:66
#4 0x7fd95b04af38 in gtk_at_context_init ../gtk/gtkatcontext.c:406
#5 0x7fd95aac40e2 in g_type_create_instance (/usr/lib/libgobject-2.0.so.0+0x3f0e2) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
Indirect leak of 2128 byte(s) in 14 object(s) allocated from:
#0 0x7fd95c5e3359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7fd95ab49762 in g_malloc (/usr/lib/libglib-2.0.so.0+0x62762) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
#2 0x7fd95b04af08 in gtk_at_context_init ../gtk/gtkatcontext.c:402
#3 0x7fd95aac40e2 in g_type_create_instance (/usr/lib/libgobject-2.0.so.0+0x3f0e2) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
Indirect leak of 2016 byte(s) in 14 object(s) allocated from:
#0 0x7fd95c5e3359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7fd95ab49762 in g_malloc (/usr/lib/libglib-2.0.so.0+0x62762) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
#2 0x7fd95b04af38 in gtk_at_context_init ../gtk/gtkatcontext.c:406
#3 0x7fd95aac40e2 in g_type_create_instance (/usr/lib/libgobject-2.0.so.0+0x3f0e2) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
Indirect leak of 1886 byte(s) in 183 object(s) allocated from:
#0 0x7fd95c56e32a in __interceptor_strdup /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:454
#1 0x7fd9599ed898 in FcValueSave (/usr/lib/libfontconfig.so.1+0x20898) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 1536 byte(s) in 48 object(s) allocated from:
#0 0x7fd95c5e2cc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7fd9599ed950 (/usr/lib/libfontconfig.so.1+0x20950) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 1344 byte(s) in 56 object(s) allocated from:
#0 0x7fd95c5e2cc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7fd95ab4b2ba in g_malloc0 (/usr/lib/libglib-2.0.so.0+0x642ba) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
#2 0x7fd95b47e4e7 in gtk_accessible_attribute_set_init ../gtk/gtkaccessibleattributeset.c:54
#3 0x7fd95b47e4e7 in gtk_accessible_attribute_set_new ../gtk/gtkaccessibleattributeset.c:66
#4 0x7fd95b04af08 in gtk_at_context_init ../gtk/gtkatcontext.c:402
#5 0x7fd95aac40e2 in g_type_create_instance (/usr/lib/libgobject-2.0.so.0+0x3f0e2) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
Indirect leak of 1008 byte(s) in 14 object(s) allocated from:
#0 0x7fd95c5e3359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7fd95ab49762 in g_malloc (/usr/lib/libglib-2.0.so.0+0x62762) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
#2 0x7fd95b04af68 in gtk_at_context_init ../gtk/gtkatcontext.c:410
#3 0x7fd95aac40e2 in g_type_create_instance (/usr/lib/libgobject-2.0.so.0+0x3f0e2) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
Indirect leak of 384 byte(s) in 8 object(s) allocated from:
#0 0x7fd95c5e3359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7fd9599e3b98 in FcLangSetCopy (/usr/lib/libfontconfig.so.1+0x16b98) (BuildId: 2f7305d108d26daad426b3855fe9225ddfef356b)
Indirect leak of 72 byte(s) in 3 object(s) allocated from:
#0 0x7fd95c5e2cc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7fd95ab4b2ba in g_malloc0 (/usr/lib/libglib-2.0.so.0+0x642ba) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
#2 0x7fd95b03cc0c in gtk_accessible_update_relation ../gtk/gtkaccessible.c:647
#3 0x7fd95b26c4a6 in gtk_notebook_insert_notebook_page ../gtk/gtknotebook.c:4056
#4 0x7fd95b26cb3e in gtk_notebook_real_insert_page ../gtk/gtknotebook.c:4130
#5 0x5575d704c7f9 in add_data_tab ../demos/gtk-demo/main.c:481
#6 0x5575d704c7f9 in load_file ../demos/gtk-demo/main.c:521
#7 0x5575d704d92b in selection_cb ../demos/gtk-demo/main.c:719
#8 0x5575d704e00f in activate ../demos/gtk-demo/main.c:958
#9 0x5575d704e215 in command_line ../demos/gtk-demo/main.c:1005
#10 0x7fd95a920ec8 (/usr/lib/libgio-2.0.so.0+0x74ec8) (BuildId: 895d79e5cc47d609ac2f19b0d8174b11176cd967)
Indirect leak of 32 byte(s) in 1 object(s) allocated from:
#0 0x7fd95c5e2cc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7fd95ab4b2ba in g_malloc0 (/usr/lib/libglib-2.0.so.0+0x642ba) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
#2 0x7fd95b03c2dc in gtk_accessible_update_property ../gtk/gtkaccessible.c:496
#3 0x7fd95aaa94fa (/usr/lib/libgobject-2.0.so.0+0x244fa) (BuildId: d52cf1f005cfe3530046602d6ca3fff01f798d5f)
Indirect leak of 24 byte(s) in 1 object(s) allocated from:
#0 0x7fd95c5e2cc1 in __interceptor_calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:77
#1 0x7fd95ab4b2ba in g_malloc0 (/usr/lib/libglib-2.0.so.0+0x642ba) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
#2 0x7fd95b03cc0c in gtk_accessible_update_relation ../gtk/gtkaccessible.c:647
#3 0x7fd95b26c4a6 in gtk_notebook_insert_notebook_page ../gtk/gtknotebook.c:4056
#4 0x7fd95b0b25db in _gtk_builder_add ../gtk/gtkbuilder.c:1145
#5 0x7fd95b0c7d25 in end_element ../gtk/gtkbuilderparser.c:1981
#6 0x7fd95b0bf8ed in proxy_end_element ../gtk/gtkbuilderparser.c:104
#7 0x7fd95ab445e1 (/usr/lib/libglib-2.0.so.0+0x5d5e1) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
Indirect leak of 3 byte(s) in 1 object(s) allocated from:
#0 0x7fd95c5e3359 in __interceptor_malloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7fd95ab49762 in g_malloc (/usr/lib/libglib-2.0.so.0+0x62762) (BuildId: d310ee36df88b18d95f79813384e6f7decd59c68)
SUMMARY: AddressSanitizer: 87120 byte(s) leaked in 2776 allocation(s).