[Mesa-dev] [PATCH] i965: Don't leak gen_spec from INTEL_DEBUG=bat handling.

Jason Ekstrand jason at jlekstrand.net
Thu Mar 23 05:35:50 UTC 2017


Is the whole spec really a flat thing you an free with a single free()?  If 
not, maybe we should consider pulling in ralloc to help out.


On March 22, 2017 22:25:40 Kenneth Graunke <kenneth at whitecape.org> wrote:

> We were loading the XML descriptions on every batchbuffer and leaking
> them each time.  Now, we load it once at screen init time and free it
> at screen destroy time.  Caught by Coverity.
>
> CID: 1403203
> ---
>  src/mesa/drivers/dri/i965/intel_batchbuffer.c | 2 +-
>  src/mesa/drivers/dri/i965/intel_screen.c      | 8 ++++++++
>  src/mesa/drivers/dri/i965/intel_screen.h      | 4 ++++
>  3 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
> b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> index 49a00c12ba2..e3fb071300c 100644
> --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> @@ -202,7 +202,7 @@ static void
>  do_batch_dump(struct brw_context *brw)
>  {
>     struct intel_batchbuffer *batch = &brw->batch;
> -   struct gen_spec *spec = gen_spec_load(&brw->screen->devinfo);
> +   struct gen_spec *spec = brw->screen->decoder_spec;
>
>     if (batch->ring != RENDER_RING)
>        return;
> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c 
> b/src/mesa/drivers/dri/i965/intel_screen.c
> index c7f111d04af..c8c6698a756 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -38,6 +38,7 @@
>  #include "util/ralloc.h"
>  #include "brw_defines.h"
>  #include "compiler/nir/nir.h"
> +#include "common/gen_decoder.h"
>
>  #include "utils.h"
>  #include "xmlpool.h"
> @@ -1106,6 +1107,8 @@ intelDestroyScreen(__DRIscreen * sPriv)
>     dri_bufmgr_destroy(screen->bufmgr);
>     driDestroyOptionInfo(&screen->optionCache);
>
> +   free(screen->decoder_spec);
> +
>     ralloc_free(screen);
>     sPriv->driverPrivate = NULL;
>  }
> @@ -1764,6 +1767,11 @@ __DRIconfig **intelInitScreen2(__DRIscreen *dri_screen)
>
>     brw_process_intel_debug_variable();
>
> +#ifdef DEBUG
> +   if (INTEL_DEBUG & DEBUG_BATCH)
> +      screen->decoder_spec = gen_spec_load(devinfo);
> +#endif
> +
>     if (INTEL_DEBUG & DEBUG_BUFMGR)
>        dri_bufmgr_set_debug(screen->bufmgr, true);
>
> diff --git a/src/mesa/drivers/dri/i965/intel_screen.h 
> b/src/mesa/drivers/dri/i965/intel_screen.h
> index d8cda58c964..29ce94d6756 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.h
> +++ b/src/mesa/drivers/dri/i965/intel_screen.h
> @@ -41,6 +41,8 @@
>  extern "C" {
>  #endif
>
> +struct gen_spec;
> +
>  struct intel_screen
>  {
>     int deviceID;
> @@ -103,6 +105,8 @@ struct intel_screen
>      * Number of EUs reported by the I915_PARAM_EU_TOTAL parameter
>      */
>     int eu_total;
> +
> +   struct gen_spec *decoder_spec;
>  };
>
>  extern void intelDestroyContext(__DRIcontext * driContextPriv);
> --
> 2.12.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev




More information about the mesa-dev mailing list