From: Francisco Jerez Date: Wed, 23 Oct 2013 18:16:26 +0000 (-0700) Subject: i965: Handle deallocation of some private ralloc contexts explicitly. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=db47074ac02e2b822dd118f4837b32732941b78b;p=mesa.git i965: Handle deallocation of some private ralloc contexts explicitly. These ralloc contexts belong to a specific object and are being deallocated manually from the class destructor. Now that we've hooked up destructors to ralloc there's no reason for them to be children of any other context, and doing so might to lead to double frees under some circumstances. The class destructor has all the responsibility of freeing class memory resources now. --- diff --git a/src/mesa/drivers/dri/i965/brw_cfg.cpp b/src/mesa/drivers/dri/i965/brw_cfg.cpp index 33097ebff4f..e9d2bb81ee7 100644 --- a/src/mesa/drivers/dri/i965/brw_cfg.cpp +++ b/src/mesa/drivers/dri/i965/brw_cfg.cpp @@ -80,7 +80,7 @@ cfg_t::cfg_t(void *mem_ctx, exec_list *instructions) void cfg_t::create(void *parent_mem_ctx, exec_list *instructions) { - mem_ctx = ralloc_context(parent_mem_ctx); + mem_ctx = ralloc_context(NULL); block_list.make_empty(); blocks = NULL; num_blocks = 0; diff --git a/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp b/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp index 213a0fd3778..21b261894d3 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp @@ -246,7 +246,7 @@ fs_live_variables::var_from_reg(fs_reg *reg) fs_live_variables::fs_live_variables(fs_visitor *v, cfg_t *cfg) : v(v), cfg(cfg) { - mem_ctx = this; + mem_ctx = ralloc_context(NULL); num_vgrfs = v->virtual_grf_count; num_vars = 0; diff --git a/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp b/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp index a1ecfde3743..27de0e6991d 100644 --- a/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp +++ b/src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp @@ -347,7 +347,7 @@ public: instruction_scheduler(backend_visitor *v, int grf_count, bool post_reg_alloc) { this->bv = v; - this->mem_ctx = ralloc_context(v->mem_ctx); + this->mem_ctx = ralloc_context(NULL); this->grf_count = grf_count; this->instructions.make_empty(); this->instructions_to_schedule = 0; diff --git a/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp b/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp index c568f7546c3..3adda09092d 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp @@ -156,7 +156,7 @@ vec4_live_variables::compute_live_variables() vec4_live_variables::vec4_live_variables(vec4_visitor *v, cfg_t *cfg) : v(v), cfg(cfg) { - mem_ctx = ralloc_context(cfg->mem_ctx); + mem_ctx = ralloc_context(NULL); num_vars = v->virtual_grf_count * 4; bd = rzalloc_array(mem_ctx, struct block_data, cfg->num_blocks);