From 6001235b0465ba1961f8abd66a860bcf1f14fc22 Mon Sep 17 00:00:00 2001 From: emersion Date: Fri, 8 Dec 2017 11:17:56 +0100 Subject: [PATCH] Listen to display destroy in session It's not the backend's responsibility to destroy the session anymore. --- backend/multi/backend.c | 1 - backend/session/session.c | 13 ++++++++++++- include/wlr/backend/session.h | 2 ++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/backend/multi/backend.c b/backend/multi/backend.c index c35303e0..fc0c5b81 100644 --- a/backend/multi/backend.c +++ b/backend/multi/backend.c @@ -35,7 +35,6 @@ static void multi_backend_destroy(struct wlr_backend *_backend) { wlr_backend_destroy(sub->backend); free(sub); } - wlr_session_destroy(backend->session); free(backend); } diff --git a/backend/session/session.c b/backend/session/session.c index 657558fd..0ed54499 100644 --- a/backend/session/session.c +++ b/backend/session/session.c @@ -58,6 +58,12 @@ out: return 1; } +static void handle_display_destroy(struct wl_listener *listener, void *data) { + struct wlr_session *session = + wl_container_of(listener, session, display_destroy); + wlr_session_destroy(session); +} + struct wlr_session *wlr_session_create(struct wl_display *disp) { struct wlr_session *session = NULL; const struct session_impl **iter; @@ -100,6 +106,9 @@ struct wlr_session *wlr_session_create(struct wl_display *disp) { goto error_mon; } + session->display_destroy.notify = handle_display_destroy; + wl_display_add_destroy_listener(disp, &session->display_destroy); + return session; error_mon: @@ -107,7 +116,7 @@ error_mon: error_udev: udev_unref(session->udev); error_session: - wlr_session_destroy(session); + session->impl->destroy(session); return NULL; } @@ -116,6 +125,8 @@ void wlr_session_destroy(struct wlr_session *session) { return; } + wl_list_remove(&session->display_destroy.link); + wl_event_source_remove(session->udev_event); udev_monitor_unref(session->mon); udev_unref(session->udev); diff --git a/include/wlr/backend/session.h b/include/wlr/backend/session.h index 5c822ea9..3242a13f 100644 --- a/include/wlr/backend/session.h +++ b/include/wlr/backend/session.h @@ -33,6 +33,8 @@ struct wlr_session { struct wl_event_source *udev_event; struct wl_list devices; + + struct wl_listener display_destroy; }; /*