# HG changeset patch # User Max Brister # Date 1341973551 18000 # Node ID 65f74f52886cc8c30f2a946646f8435c11a12133 # Parent 70ff15b6d9963149547bb51ccca1fcc837cc5e62 Memory leaks with matrices in JIT * src/pt-jit.cc (octave_jit_cast_any_matrix): Delete matrix. (octave_jit_cast_matrix_any): Release octave base value. (jit_info::execute): Clear previous variable. * src/pt-jit.h (jit_array::jit_array): Do not grab dimensions. (jit_array::grab_dimensions): Remove method. diff --git a/src/pt-jit.cc b/src/pt-jit.cc --- a/src/pt-jit.cc +++ b/src/pt-jit.cc @@ -176,6 +176,7 @@ octave_value ret (*m->array); octave_base_value *rep = ret.internal_rep (); rep->grab (); + delete m->array; return rep; } @@ -185,6 +186,7 @@ { NDArray m = obv->array_value (); *ret = m; + obv->release (); } extern "C" double @@ -3636,10 +3638,11 @@ { if (arguments[i].second) { - octave_value current = symbol_table::varval (arguments[i].first); + octave_value ¤t = symbol_table::varref (arguments[i].first); octave_base_value *obv = current.internal_rep (); obv->grab (); real_arguments[i] = obv; + current = octave_value (); } } diff --git a/src/pt-jit.h b/src/pt-jit.h --- a/src/pt-jit.h +++ b/src/pt-jit.h @@ -226,7 +226,6 @@ { jit_array (T& from) : array (new T (from)) { - grab_dimensions (); update (); } @@ -244,11 +243,6 @@ update (); } - void grab_dimensions (void) - { - ++(dimensions[-2]); - } - operator T () const { return *array;