discomfitor pushed a commit to branch enlightenment-0.21. http://git.enlightenment.org/core/enlightenment.git/commit/?id=bb30294f6605da2830378540c8d6f6685ecf230e
commit bb30294f6605da2830378540c8d6f6685ecf230e Author: Mike Blumenkrantz <[email protected]> Date: Fri Mar 3 11:56:16 2017 -0500 hide wl clients before deleting them on surface destroy ==13853== Invalid read of size 8 ==13853== at 0x5C7C56: _e_comp_wl_surface_destroy (e_comp_wl.c:1804) ==13853== by 0xA999971: destroy_resource (wayland-server.c:611) ==13853== by 0xA9A06F4: for_each_helper (wayland-util.c:374) ==13853== by 0xA9A073F: wl_map_for_each (wayland-util.c:387) ==13853== by 0xA999C87: wl_client_destroy (wayland-server.c:763) ==13853== by 0xA999216: wl_client_connection_data (wayland-server.c:283) ==13853== by 0xA99C2B0: wl_event_source_fd_dispatch (event-loop.c:90) ==13853== by 0xA99CC11: wl_event_loop_dispatch (event-loop.c:423) ==13853== by 0xA787AC0: _cb_create_data (ecore_wl2_display.c:272) ==13853== by 0xDBE984D: _ecore_call_fd_cb (ecore_private.h:333) ==13853== by 0xDBEC01B: _ecore_main_fd_handlers_call (ecore_main.c:1992) ==13853== by 0xDBEC8A9: _ecore_main_loop_iterate_internal (ecore_main.c:2379) ==13853== by 0xDBEA672: ecore_main_loop_begin (ecore_main.c:1292) ==13853== by 0x441DA9: main (e_main.c:1089) ==13853== Address 0x30ba5d90 is 176 bytes inside a block of size 1,424 free'd ==13853== at 0x4C2ED4A: free (vg_replace_malloc.c:530) ==13853== by 0x4603D6: _e_client_free (e_client.c:588) ==13853== by 0x5475A8: e_object_free (e_object.c:119) ==13853== by 0x5477C4: e_object_unref (e_object.c:152) ==13853== by 0x5473D7: e_object_del (e_object.c:60) ==13853== by 0x5C7C51: _e_comp_wl_surface_destroy (e_comp_wl.c:1803) ==13853== by 0xA999971: destroy_resource (wayland-server.c:611) ==13853== by 0xA9A06F4: for_each_helper (wayland-util.c:374) ==13853== by 0xA9A073F: wl_map_for_each (wayland-util.c:387) ==13853== by 0xA999C87: wl_client_destroy (wayland-server.c:763) ==13853== by 0xA999216: wl_client_connection_data (wayland-server.c:283) ==13853== by 0xA99C2B0: wl_event_source_fd_dispatch (event-loop.c:90) ==13853== by 0xA99CC11: wl_event_loop_dispatch (event-loop.c:423) ==13853== by 0xA787AC0: _cb_create_data (ecore_wl2_display.c:272) ==13853== by 0xDBE984D: _ecore_call_fd_cb (ecore_private.h:333) ==13853== by 0xDBEC01B: _ecore_main_fd_handlers_call (ecore_main.c:1992) ==13853== by 0xDBEC8A9: _ecore_main_loop_iterate_internal (ecore_main.c:2379) ==13853== by 0xDBEA672: ecore_main_loop_begin (ecore_main.c:1292) ==13853== by 0x441DA9: main (e_main.c:1089) ==13853== Block was alloc'd at ==13853== at 0x4C2FA50: calloc (vg_replace_malloc.c:711) ==13853== by 0x5471A4: e_object_alloc (e_object.c:20) ==13853== by 0x467AD5: e_client_new (e_client.c:2596) ==13853== by 0x5C7F11: _e_comp_wl_compositor_cb_surface_create (e_comp_wl.c:1858) ==13853== by 0xADBDC57: ffi_call_unix64 (in /usr/lib64/libffi.so.6.0.2) ==13853== by 0xADBD6B9: ffi_call (in /usr/lib64/libffi.so.6.0.2) ==13853== by 0xA99EEED: wl_closure_invoke (connection.c:935) ==13853== by 0xA999581: wl_client_connection_data (wayland-server.c:371) ==13853== by 0xA99C2B0: wl_event_source_fd_dispatch (event-loop.c:90) ==13853== by 0xA99CC11: wl_event_loop_dispatch (event-loop.c:423) ==13853== by 0xA787AC0: _cb_create_data (ecore_wl2_display.c:272) ==13853== by 0xDBE984D: _ecore_call_fd_cb (ecore_private.h:333) ==13853== by 0xDBEC01B: _ecore_main_fd_handlers_call (ecore_main.c:1992) ==13853== by 0xDBEC8A9: _ecore_main_loop_iterate_internal (ecore_main.c:2379) ==13853== by 0xDBEA672: ecore_main_loop_begin (ecore_main.c:1292) ==13853== by 0x441DA9: main (e_main.c:1089) --- src/bin/e_comp_wl.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 99eedc6..d93f02e 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -1759,9 +1759,13 @@ _e_comp_wl_surface_destroy(struct wl_resource *resource) ec->ignored = 1; if (!e_object_is_del(E_OBJECT(ec))) ec->comp_data->mapped = EINA_FALSE; + evas_object_hide(ec->frame); + } + else + { + evas_object_hide(ec->frame); + e_object_del(E_OBJECT(ec)); } - else e_object_del(E_OBJECT(ec)); - evas_object_hide(ec->frame); } static void --
