mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2026-03-23 05:35:51 -04:00
Merge branch 'terminate-on-event-loop-destroy' into 'main'
server: fix abort when terminating display on wl_event_loop destroy See merge request wayland/wayland!421
This commit is contained in:
commit
bca53da52a
2 changed files with 31 additions and 1 deletions
|
|
@ -1313,11 +1313,12 @@ wl_display_destroy(struct wl_display *display)
|
||||||
wl_socket_destroy(s);
|
wl_socket_destroy(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
close(display->terminate_efd);
|
|
||||||
wl_event_source_remove(display->term_source);
|
wl_event_source_remove(display->term_source);
|
||||||
|
|
||||||
wl_event_loop_destroy(display->loop);
|
wl_event_loop_destroy(display->loop);
|
||||||
|
|
||||||
|
close(display->terminate_efd);
|
||||||
|
|
||||||
wl_list_for_each_safe(global, gnext, &display->global_list, link)
|
wl_list_for_each_safe(global, gnext, &display->global_list, link)
|
||||||
free(global);
|
free(global);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1784,3 +1784,32 @@ TEST(no_source_terminate)
|
||||||
display_run(d);
|
display_run(d);
|
||||||
display_destroy(d);
|
display_destroy(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct terminate_on_event_loop_destroy_data {
|
||||||
|
struct wl_display *display;
|
||||||
|
struct wl_listener loop_destroy_listener;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
handle_event_loop_destroy(struct wl_listener *listener, void *user_data)
|
||||||
|
{
|
||||||
|
struct terminate_on_event_loop_destroy_data *data =
|
||||||
|
wl_container_of(listener, data, loop_destroy_listener);
|
||||||
|
wl_display_terminate(data->display);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(terminate_on_event_loop_destroy)
|
||||||
|
{
|
||||||
|
struct display *d;
|
||||||
|
struct wl_event_loop *loop;
|
||||||
|
struct terminate_on_event_loop_destroy_data data;
|
||||||
|
|
||||||
|
d = display_create();
|
||||||
|
loop = wl_display_get_event_loop(d->wl_display);
|
||||||
|
|
||||||
|
data.display = d->wl_display;
|
||||||
|
data.loop_destroy_listener.notify = handle_event_loop_destroy;
|
||||||
|
wl_event_loop_add_destroy_listener(loop, &data.loop_destroy_listener);
|
||||||
|
|
||||||
|
display_destroy(d);
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue