i965: Handle deallocation of some private ralloc contexts explicitly.
authorFrancisco Jerez <currojerez@riseup.net>
Wed, 23 Oct 2013 18:16:26 +0000 (11:16 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Tue, 29 Oct 2013 19:40:55 +0000 (12:40 -0700)
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.

src/mesa/drivers/dri/i965/brw_cfg.cpp
src/mesa/drivers/dri/i965/brw_fs_live_variables.cpp
src/mesa/drivers/dri/i965/brw_schedule_instructions.cpp
src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp

index 33097ebff4f4d56a72bbd594be970fe30273ed59..e9d2bb81ee79ec2a750b05b356f397fcfc07cf45 100644 (file)
@@ -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;
index 213a0fd377850030169f5b9da421bd304fb9cbe8..21b261894d37040110cab529df4bcb481070aec2 100644 (file)
@@ -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;
index a1ecfde37434a6fe1359fbd26d69533196ea7d73..27de0e6991dfe6b6913526dfae4d4163f3b8a313 100644 (file)
@@ -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;
index c568f7546c36df81b9d4dcb6f2f0829ab0582343..3adda09092ddb146a81630bec237d99ac947b0e3 100644 (file)
@@ -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);