From: Ander Conselvan de Oliveira <[email protected]>

Currently we destroy the renderer before the outputs are destroyed, but
that sometimes leads to an error since a reference to the renderer is
necessary in order to destroy a gl_renderer_output.

Since destroying the renderer is common among all backends, just move
that call into weston_compositor_shutdown() immediately after the
outputs being destroyed.
---
 src/compositor-drm.c      |    2 --
 src/compositor-fbdev.c    |    2 --
 src/compositor-headless.c |    2 --
 src/compositor-rdp.c      |    1 -
 src/compositor-rpi.c      |    2 --
 src/compositor-wayland.c  |    2 --
 src/compositor-x11.c      |    2 --
 src/compositor.c          |    3 +++
 8 files changed, 3 insertions(+), 13 deletions(-)

diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index f85298a..d637e75 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -2336,8 +2336,6 @@ drm_destroy(struct weston_compositor *ec)
 
        destroy_sprites(d);
 
-       ec->renderer->destroy(ec);
-
        weston_compositor_shutdown(ec);
 
        if (d->gbm)
diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c
index e649d43..0d96269 100644
--- a/src/compositor-fbdev.c
+++ b/src/compositor-fbdev.c
@@ -797,8 +797,6 @@ fbdev_compositor_destroy(struct weston_compositor *base)
 
        udev_input_destroy(&compositor->input);
 
-       compositor->base.renderer->destroy(&compositor->base);
-
        /* Destroy the output. */
        weston_compositor_shutdown(&compositor->base);
 
diff --git a/src/compositor-headless.c b/src/compositor-headless.c
index 5497455..5a5c1e6 100644
--- a/src/compositor-headless.c
+++ b/src/compositor-headless.c
@@ -141,8 +141,6 @@ headless_destroy(struct weston_compositor *ec)
 {
        struct headless_compositor *c = (struct headless_compositor *) ec;
 
-       ec->renderer->destroy(ec);
-
        weston_seat_release(&c->fake_seat);
        weston_compositor_shutdown(ec);
 
diff --git a/src/compositor-rdp.c b/src/compositor-rdp.c
index 58342b9..942af50 100644
--- a/src/compositor-rdp.c
+++ b/src/compositor-rdp.c
@@ -521,7 +521,6 @@ rdp_restore(struct weston_compositor *ec)
 static void
 rdp_destroy(struct weston_compositor *ec)
 {
-       ec->renderer->destroy(ec);
        weston_compositor_shutdown(ec);
 
        free(ec);
diff --git a/src/compositor-rpi.c b/src/compositor-rpi.c
index 1d52a94..399090d 100644
--- a/src/compositor-rpi.c
+++ b/src/compositor-rpi.c
@@ -422,8 +422,6 @@ rpi_compositor_destroy(struct weston_compositor *base)
 
        udev_input_destroy(&compositor->input);
 
-       compositor->base.renderer->destroy(&compositor->base);
-
        /* destroys outputs, too */
        weston_compositor_shutdown(&compositor->base);
 
diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
index 14ff4af..d2d8942 100644
--- a/src/compositor-wayland.c
+++ b/src/compositor-wayland.c
@@ -1398,8 +1398,6 @@ wayland_destroy(struct weston_compositor *ec)
 {
        struct wayland_compositor *c = (struct wayland_compositor *) ec;
 
-       ec->renderer->destroy(ec);
-
        weston_compositor_shutdown(ec);
 
        if (c->parent.shm)
diff --git a/src/compositor-x11.c b/src/compositor-x11.c
index 2ef1b5d..97fe3b1 100644
--- a/src/compositor-x11.c
+++ b/src/compositor-x11.c
@@ -1415,8 +1415,6 @@ x11_destroy(struct weston_compositor *ec)
        wl_event_source_remove(compositor->xcb_source);
        x11_input_destroy(compositor);
 
-       ec->renderer->destroy(ec);
-
        weston_compositor_shutdown(ec); /* destroys outputs, too */
 
        XCloseDisplay(compositor->dpy);
diff --git a/src/compositor.c b/src/compositor.c
index ff0f3ab..329ee49 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -3734,6 +3734,9 @@ weston_compositor_shutdown(struct weston_compositor *ec)
        wl_list_for_each_safe(output, next, &ec->output_list, link)
                output->destroy(output);
 
+       if (ec->renderer)
+               ec->renderer->destroy(ec);
+
        weston_binding_list_destroy_all(&ec->key_binding_list);
        weston_binding_list_destroy_all(&ec->button_binding_list);
        weston_binding_list_destroy_all(&ec->touch_binding_list);
-- 
1.7.9.5

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to