From: Pekka Paalanen <[email protected]>

Fixes the failure to start with fbdev-backend:

weston: /home/pq/git/weston/libweston/compositor.c:4733: 
weston_compositor_add_pending_output: Assertion `output->disable' failed.

The disable hook was completely unimplemented, and the regression was
caused by e952a01c3b42c7c870091e71488e9469bd897153
"libweston: move asserts to add_pending_output()".
It used to work because Weston never tried to explicitly disable the
fbdev output, but now it is hitting the assert.

Fix it by tentatively implementing a disable hook. It has not been
tested to work for explicit disabling, but it does solve the regression.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=102208
Cc: [email protected]
Signed-off-by: Pekka Paalanen <[email protected]>
---
 libweston/compositor-fbdev.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/libweston/compositor-fbdev.c b/libweston/compositor-fbdev.c
index e80a5040..6a305385 100644
--- a/libweston/compositor-fbdev.c
+++ b/libweston/compositor-fbdev.c
@@ -473,6 +473,21 @@ out_hw_surface:
 }
 
 static int
+fbdev_output_disable_handler(struct weston_output *base)
+{
+       if (!base->enabled)
+               return 0;
+
+       /* Close the frame buffer. */
+       fbdev_output_disable(base);
+
+       if (base->renderer_state != NULL)
+               pixman_renderer_output_destroy(base);
+
+       return 0;
+}
+
+static int
 fbdev_output_create(struct fbdev_backend *backend,
                     const char *device)
 {
@@ -497,7 +512,7 @@ fbdev_output_create(struct fbdev_backend *backend,
 
        output->base.name = strdup("fbdev");
        output->base.destroy = fbdev_output_destroy;
-       output->base.disable = NULL;
+       output->base.disable = fbdev_output_disable_handler;
        output->base.enable = fbdev_output_enable;
 
        weston_output_init(&output->base, backend->compositor);
@@ -539,11 +554,7 @@ fbdev_output_destroy(struct weston_output *base)
 
        weston_log("Destroying fbdev output.\n");
 
-       /* Close the frame buffer. */
-       fbdev_output_disable(base);
-
-       if (base->renderer_state != NULL)
-               pixman_renderer_output_destroy(base);
+       fbdev_output_disable_handler(base);
 
        /* Remove the output. */
        weston_output_destroy(&output->base);
-- 
2.13.0

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

Reply via email to