Hardware planes are going to make E_Comp_Wl_Buffer lifetimes harder to
manage, so we need to let the E_Comp_Wl_Buffer object outlive the
resource attached to it.
We already track a busy count, so we just have to use it to prevent
deleting a busy buffer.
the frame deletion callback would trigger far too late, allowing
crashes to occur if the selection target client exited between the
time of the drop event and the selection send event
==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)
this used to be set on show since the assumption was that show was the
first time the client would be seen, but this turns out to be incorrect
and results in focus being set too early (breaking policy)
this is a remnant from xdg5-only code where new_client meant "first buffer". with
xdg6, this is no longer the case since a surface can receive infinite commits
without ever having a buffer attached
ref 9a82f7bcb0
xdg6 allows for clients without buffers to be configured such that the
first buffer will match the configured state
if a client is sized before this point, the changes.size flag will be set