[PATCH weston] window: avoid a gcc warning in buffer release handler

Kristian Høgsberg hoegsberg at gmail.com
Wed May 22 11:44:18 PDT 2013


On Wed, May 22, 2013 at 10:20:05AM +0300, ppaalanen at gmail.com wrote:
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> 
> Apparently some compilers complain about set but not used variables
> 'available' and 'bufs', but I don't get the warning. Still, separate the
> debugging code from shm_surface_buffer_release(), so that we only
> compute 'bufs' when it is printed. This should fix the warnings.
> 
> The debugging code now prints the shm_surface buffer state before and
> after, instead of just after.

Thanks Pekka.

Kristian

> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> ---
>  clients/window.c | 48 +++++++++++++++++++++++++++++++-----------------
>  1 file changed, 31 insertions(+), 17 deletions(-)
> 
> diff --git a/clients/window.c b/clients/window.c
> index 40c0ef4..627f1e8 100644
> --- a/clients/window.c
> +++ b/clients/window.c
> @@ -420,7 +420,9 @@ enum window_location {
>  
>  static const cairo_user_data_key_t shm_surface_data_key;
>  
> -#if 0
> +/* #define DEBUG */
> +
> +#ifdef DEBUG
>  
>  static void
>  debug_print(void *proxy, int line, const char *func, const char *fmt, ...)
> @@ -893,20 +895,43 @@ to_shm_surface(struct toysurface *base)
>  }
>  
>  static void
> +shm_surface_buffer_state_debug(struct shm_surface *surface, const char *msg)
> +{
> +#ifdef DEBUG
> +	struct shm_surface_leaf *leaf;
> +	char bufs[MAX_LEAVES + 1];
> +	int i;
> +
> +	for (i = 0; i < MAX_LEAVES; i++) {
> +		leaf = &surface->leaf[i];
> +
> +		if (leaf->busy)
> +			bufs[i] = 'b';
> +		else if (leaf->cairo_surface)
> +			bufs[i] = 'a';
> +		else
> +			bufs[i] = ' ';
> +	}
> +
> +	bufs[MAX_LEAVES] = '\0';
> +	DBG_OBJ(surface->surface, "%s, leaves [%s]\n", msg, bufs);
> +#endif
> +}
> +
> +static void
>  shm_surface_buffer_release(void *data, struct wl_buffer *buffer)
>  {
>  	struct shm_surface *surface = data;
>  	struct shm_surface_leaf *leaf;
>  	int i;
>  	int free_found;
> -	int available = MAX_LEAVES;
> -	char bufs[MAX_LEAVES + 1];
> +
> +	shm_surface_buffer_state_debug(surface, "buffer_release before");
>  
>  	for (i = 0; i < MAX_LEAVES; i++) {
>  		leaf = &surface->leaf[i];
>  		if (leaf->data && leaf->data->buffer == buffer) {
>  			leaf->busy = 0;
> -			available = i;
>  			break;
>  		}
>  	}
> @@ -917,27 +942,16 @@ shm_surface_buffer_release(void *data, struct wl_buffer *buffer)
>  	for (i = 0; i < MAX_LEAVES; i++) {
>  		leaf = &surface->leaf[i];
>  
> -		if (leaf->busy)
> -			bufs[i] = 'b';
> -		else if (leaf->cairo_surface)
> -			bufs[i] = 'a';
> -		else
> -			bufs[i] = ' ';
> -
>  		if (!leaf->cairo_surface || leaf->busy)
>  			continue;
>  
>  		if (!free_found)
>  			free_found = 1;
> -		else {
> +		else
>  			shm_surface_leaf_release(leaf);
> -			bufs[i] = '*';
> -		}
>  	}
>  
> -	bufs[MAX_LEAVES] = '\0';
> -	DBG_OBJ(surface->surface, "leaf %d released, leaves [%s]\n",
> -		available, bufs);
> +	shm_surface_buffer_state_debug(surface, "buffer_release  after");
>  }
>  
>  static const struct wl_buffer_listener shm_surface_buffer_listener = {
> -- 
> 1.8.1.5
> 


More information about the wayland-devel mailing list