[PATCH weston] compositor-fbdev: fix start-up assertion

Armin Krezović krezovic.armin at gmail.com
Tue Aug 15 19:28:42 UTC 2017


On 15.08.2017 09:43, Pekka Paalanen wrote:
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> 
> 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: bluescreen_avenger at verizon.net
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

Hi,

Looks reasonable:

Reviewed-by: Armin Krezović <krezovic.armin at gmail.com>

Cheers.

> ---
>   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);
> 



More information about the wayland-devel mailing list