diff options
author | Ian Romanick <[email protected]> | 2012-07-10 16:26:33 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2013-02-07 21:18:42 -0800 |
commit | 82691f12931a022560f8054c8c8e240cd6b2fff4 (patch) | |
tree | ee69e3bcfe13b9625bd01926d781b328bad84f8b | |
parent | 04f0d6cc2235ba50f7525446004f634e03632eeb (diff) |
glsl: Change loop_analysis to not look like a resource leak
Previously the loop_state was allocated in the loop_analysis
constructor, but not freed in the (nonexistent) destructor. Moving
the allocation of the loop_state makes this code appear less sketchy.
Either way, there is no actual leak. The loop_state is freed by the
single caller of analyze_loop_variables.
Signed-off-by: Ian Romanick <[email protected]>
Cc: Dave Airlie <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=57753
-rw-r--r-- | src/glsl/loop_analysis.cpp | 13 | ||||
-rw-r--r-- | src/glsl/loop_analysis.h | 2 |
2 files changed, 7 insertions, 8 deletions
diff --git a/src/glsl/loop_analysis.cpp b/src/glsl/loop_analysis.cpp index 6a0e4da5100..191e92de7c4 100644 --- a/src/glsl/loop_analysis.cpp +++ b/src/glsl/loop_analysis.cpp @@ -105,7 +105,7 @@ loop_variable_state::insert(ir_if *if_stmt) class loop_analysis : public ir_hierarchical_visitor { public: - loop_analysis(); + loop_analysis(loop_state *loops); virtual ir_visitor_status visit(ir_loop_jump *); virtual ir_visitor_status visit(ir_dereference_variable *); @@ -129,12 +129,10 @@ public: }; -loop_analysis::loop_analysis() +loop_analysis::loop_analysis(loop_state *loops) + : loops(loops), if_statement_depth(0), current_assignment(NULL) { - this->loops = new loop_state; - - this->if_statement_depth = 0; - this->current_assignment = NULL; + /* empty */ } @@ -521,7 +519,8 @@ is_loop_terminator(ir_if *ir) loop_state * analyze_loop_variables(exec_list *instructions) { - loop_analysis v; + loop_state *loops = new loop_state; + loop_analysis v(loops); v.run(instructions); return v.loops; diff --git a/src/glsl/loop_analysis.h b/src/glsl/loop_analysis.h index 05c982fc164..769d626614b 100644 --- a/src/glsl/loop_analysis.h +++ b/src/glsl/loop_analysis.h @@ -249,7 +249,7 @@ private: void *mem_ctx; - friend class loop_analysis; + friend loop_state *analyze_loop_variables(exec_list *instructions); }; #endif /* LOOP_ANALYSIS_H */ |