[Mesa-dev] [PATCH] svga: don't crash/assert if we fail to allocate a vertex buffer

Jose Fonseca jfonseca at vmware.com
Thu Nov 10 10:05:03 PST 2011


Looks good Brian. The rest of the series looks good too AFAICT, although some of the modules are a bit outside my familiarity zone.

Jose

----- Original Message -----
> v2: check if pipe_buffer_map() returns NULL, and return NULL from
> svga_vbuf_render_map_vertices().  Per Jose's suggestion.
> ---
>  src/gallium/drivers/svga/svga_swtnl_backend.c |   29
>  +++++++++++++++++-------
>  1 files changed, 20 insertions(+), 9 deletions(-)
> 
> diff --git a/src/gallium/drivers/svga/svga_swtnl_backend.c
> b/src/gallium/drivers/svga/svga_swtnl_backend.c
> index 15b1bb5..8d0adc3 100644
> --- a/src/gallium/drivers/svga/svga_swtnl_backend.c
> +++ b/src/gallium/drivers/svga/svga_swtnl_backend.c
> @@ -96,7 +96,9 @@ svga_vbuf_render_allocate_vertices( struct
> vbuf_render *render,
>                                                  PIPE_BIND_VERTEX_BUFFER,
>                                                  PIPE_USAGE_STREAM,
>                                                  svga_render->vbuf_size);
> -         assert(svga_render->vbuf);
> +         /* The buffer allocation may fail if we run out of memory.
> +          * The draw module's vbuf code should handle that without
> crashing.
> +          */
>        }
>  
>        svga->swtnl.new_vdecl = TRUE;
> @@ -119,14 +121,23 @@ svga_vbuf_render_map_vertices( struct
> vbuf_render *render )
>     struct svga_vbuf_render *svga_render = svga_vbuf_render(render);
>     struct svga_context *svga = svga_render->svga;
>  
> -   char *ptr = (char*)pipe_buffer_map(&svga->pipe,
> -                                      svga_render->vbuf,
> -                                      PIPE_TRANSFER_WRITE |
> -                                      PIPE_TRANSFER_FLUSH_EXPLICIT |
> -                                      PIPE_TRANSFER_DISCARD |
> -                                      PIPE_TRANSFER_UNSYNCHRONIZED,
> -				      &svga_render->vbuf_transfer);
> -   return ptr + svga_render->vbuf_offset;
> +   if (svga_render->vbuf) {
> +      char *ptr = (char*)pipe_buffer_map(&svga->pipe,
> +                                         svga_render->vbuf,
> +                                         PIPE_TRANSFER_WRITE |
> +
>                                         PIPE_TRANSFER_FLUSH_EXPLICIT
> |
> +                                         PIPE_TRANSFER_DISCARD |
> +
>                                         PIPE_TRANSFER_UNSYNCHRONIZED,
> +
>                                         &svga_render->vbuf_transfer);
> +      if (ptr)
> +         return ptr + svga_render->vbuf_offset;
> +      else
> +         return NULL;
> +   }
> +   else {
> +      /* we probably ran out of memory when allocating the vertex
> buffer */
> +      return NULL;
> +   }
>  }
>  
>  static void
> --
> 1.7.3.4
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 


More information about the mesa-dev mailing list