diff options
author | José Fonseca <jfonseca@vmware.com> | 2010-04-30 19:00:58 +0100 |
---|---|---|
committer | José Fonseca <jfonseca@vmware.com> | 2010-04-30 19:32:20 +0100 |
commit | e9bf09a98a624e594bdea2503326bb693b8cf9b8 (patch) | |
tree | a54d227a4c6972a2bc23e1ff4be05806c2773487 /src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c | |
parent | 124ef032233d7afc2725e8ded0939838e7b2a76b (diff) |
draw: Fix memory leaks in llvm code.
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c')
-rw-r--r-- | src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c index d2a492f2b4..35913a5995 100644 --- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c +++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c @@ -349,7 +349,31 @@ static void llvm_middle_end_finish( struct draw_pt_middle_end *middle ) static void llvm_middle_end_destroy( struct draw_pt_middle_end *middle ) { struct llvm_middle_end *fpme = (struct llvm_middle_end *)middle; + struct draw_context *draw = fpme->draw; + struct draw_llvm_variant *variant = NULL; + + variant = fpme->variants; + while(variant) { + struct draw_llvm_variant *next = variant->next; + if (variant->function_elts) { + if (variant->function_elts) + LLVMFreeMachineCodeForFunction(draw->engine, + variant->function_elts); + LLVMDeleteFunction(variant->function_elts); + } + + if (variant->function) { + if (variant->function) + LLVMFreeMachineCodeForFunction(draw->engine, + variant->function); + LLVMDeleteFunction(variant->function); + } + + FREE(variant); + + variant = next; + } if (fpme->fetch) draw_pt_fetch_destroy( fpme->fetch ); |