wlroots/types
Dominique Martinet ffd37b664f xdg_shell: destroy children popups with parent surface
popups have a link in parent's surface->popups list and needs
to be freed before:

==6902==ERROR: AddressSanitizer: heap-use-after-free on address 0x6120001a0300 at pc 0x7fc1447acb50 bp 0x7fffd396e680 sp 0x7fffd396e670
WRITE of size 8 at 0x6120001a0300 thread T0
    #0 0x7fc1447acb4f in wl_list_remove ../util/signal.c:55
    #1 0x7fc14477d206 in destroy_xdg_popup_v6 ../types/xdg_shell_v6/wlr_xdg_popup_v6.c:162
    #2 0x7fc1447816e0 in destroy_xdg_surface_v6 ../types/xdg_shell_v6/wlr_xdg_surface_v6.c:108
    #3 0x7fc144a1c025 in destroy_resource src/wayland-server.c:688
    #4 0x7fc144a1c091 in wl_resource_destroy src/wayland-server.c:705
    #5 0x7fc14477fd6f in xdg_client_v6_handle_resource_destroy ../types/xdg_shell_v6/wlr_xdg_shell_v6.c:72
    #6 0x7fc144a1c025 in destroy_resource src/wayland-server.c:688
    #7 0x7fc144a20851  (/lib64/libwayland-server.so.0+0xc851)
    #8 0x7fc144a20d92  (/lib64/libwayland-server.so.0+0xcd92)
    #9 0x7fc144a1c140 in wl_client_destroy src/wayland-server.c:847
    #10 0x7fc144a1c21c in destroy_client_with_error src/wayland-server.c:307
    #11 0x7fc144a1c21c in wl_client_connection_data src/wayland-server.c:330
    #12 0x7fc144a1df01 in wl_event_loop_dispatch src/event-loop.c:641
    #13 0x7fc144a1c601 in wl_display_run src/wayland-server.c:1260
    #14 0x40a2f4 in main ../sway/main.c:433
    #15 0x7fc143ef718a in __libc_start_main ../csu/libc-start.c:308
    #16 0x40b749 in _start (/opt/wayland/bin/sway+0x40b749)

0x6120001a0300 is located 64 bytes inside of 264-byte region [0x6120001a02c0,0x6120001a03c8)
freed by thread T0 here:
    #0 0x7fc14690d880 in __interceptor_free (/lib64/libasan.so.5+0xee880)
    #1 0x7fc1447acce8 in wlr_signal_emit_safe ../util/signal.c:29
    #2 0x7fc1447a3cac in surface_handle_resource_destroy ../types/wlr_surface.c:576
    #3 0x7fc144a1c025 in destroy_resource src/wayland-server.c:688

previously allocated by thread T0 here:
    #0 0x7fc14690de50 in calloc (/lib64/libasan.so.5+0xeee50)
    #1 0x7fc144781d38 in create_xdg_surface_v6 ../types/xdg_shell_v6/wlr_xdg_surface_v6.c:415
    #2 0x7fc14147503d in ffi_call_unix64 (/lib64/libffi.so.6+0x603d)

Alternative would be to have popups listen to the parent's surface
destroy event and remove themselves from the list at this point OR on
their own destroy, whichever happens first, but that seems more
complicated for little benefit.
2018-06-25 17:54:25 +09:00
..
data_device update drag position at the right times 2018-06-05 23:45:03 -04:00
seat seat: allow clients to bind to seat multiple times 2018-06-04 22:31:36 +09:00
xdg_shell xdg_shell: destroy children popups with parent surface 2018-06-25 17:54:25 +09:00
xdg_shell_v6 xdg_shell: destroy children popups with parent surface 2018-06-25 17:54:25 +09:00
meson.build Merge branch 'master' into screencontent 2018-06-17 14:49:18 +01:00
wlr_box.c box: fix wlr_box_intersection 2018-06-06 08:47:04 +01:00
wlr_buffer.c buffer: fix wlr_texture leak on failed alloc 2018-06-16 19:01:13 +01:00
wlr_compositor.c compositor, surface: correctly destroy resources 2018-05-03 18:45:30 +01:00
wlr_cursor.c cleanup: Use void for zero-parameter functions 2018-05-30 20:19:16 -04:00
wlr_export_dmabuf_v1.c export-dmabuf: update protocol 2018-06-17 14:19:45 +01:00
wlr_gamma_control.c Revert "ELF Visibility" 2018-02-19 18:01:27 -05:00
wlr_idle_inhibit_v1.c Don't use the wlr_ prefix for static functions 2018-04-25 23:51:00 +01:00
wlr_idle.c move activity_notify into events in wlr_idle 2018-02-22 21:14:28 +01:00
wlr_input_device.c input-device: add output_name field, populate it from libinput 2018-04-29 14:30:09 +01:00
wlr_input_inhibitor.c input-inhibit: use wlr_signal_emit_safe 2018-06-24 19:33:15 -04:00
wlr_keyboard.c backend/x11: correctly destroy input devices 2018-04-28 12:55:36 +01:00
wlr_layer_shell.c layer-shell: check whether the surface is mapped in layer_surface_destroy() 2018-06-16 17:29:53 +03:00
wlr_linux_dmabuf.c Merge branch 'master' into screencontent 2018-06-17 14:49:18 +01:00
wlr_list.c Revert "ELF Visibility" 2018-02-19 18:01:27 -05:00
wlr_matrix.c Fix typos in comments and strings 2018-05-03 21:59:43 +01:00
wlr_output_damage.c output-damage: limit the number of damaged rectangles 2018-05-05 14:28:55 +01:00
wlr_output_layout.c cleanup: Use void for zero-parameter functions 2018-05-30 20:19:16 -04:00
wlr_output.c Merge branch 'master' into screencontent 2018-06-17 14:49:18 +01:00
wlr_pointer.c backend/x11: correctly destroy input devices 2018-04-28 12:55:36 +01:00
wlr_primary_selection.c wlr_primary_selection: fix use-after-free when cancelling source 2018-06-25 17:28:44 +09:00
wlr_region.c compositor: redesign how resources are managed 2018-04-26 17:51:06 +01:00
wlr_screenshooter.c render: split render.h into wlr_renderer.h and wlr_texture.h 2018-03-19 23:16:29 +01:00
wlr_server_decoration.c Revert "ELF Visibility" 2018-02-19 18:01:27 -05:00
wlr_surface.c surface: remove wlr_frame_callback 2018-06-20 20:00:23 +01:00
wlr_tablet_pad.c Revert "ELF Visibility" 2018-02-19 18:01:27 -05:00
wlr_tablet_tool.c Revert "ELF Visibility" 2018-02-19 18:01:27 -05:00
wlr_touch.c Revert "ELF Visibility" 2018-02-19 18:01:27 -05:00
wlr_virtual_keyboard_v1.c virtual-keyboard: fix wlr_virtual_keyboard_manager_v1_destroy 2018-05-30 09:25:46 +01:00
wlr_wl_shell.c Send axis source event 2018-05-12 13:53:21 +01:00
wlr_xcursor_manager.c Redesign wlr_texture 2018-03-24 23:48:32 -04:00
wlr_xdg_output.c xdg-output: bump output manager version to 2 2018-05-17 09:30:10 +01:00