﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
1018	Memory leak combining operations and methods	Pedro Gea	Víctor de Buen Remiro	"En el marco de evitar problemas en el uso de la memoria RAM con TOL se ha encontrado un error un tanto inesperado.

El problema está bastante profundo dentro del código de MMS, así que he intentado extraer o aislar en un pequeño ejemplo de qué se trata, o al menos por donde van los problemas.

En el ejemplo siguiente, los métodos {{{GetValue1}}}, {{{GetValue2}}} y {{{GetValue3}}} no actúan del mismo modo de cara a {{{NObject}}}. Sólo el segundo se ajusta a lo esperado.

{{{
NameBlock parent = [[
  Matrix m = Rand(1,1,1,1);
  Set instancias = [[
    NameBlock instancia = [[
      Real GetValue(Real void) { 1 }
    ]]
  ]];
  NameBlock GetInstancia(Real void) { instancias[1] };
  Matrix GetValue1(Real void) {
    NameBlock ins = parent::GetInstancia(?); 
    Anything data = m * ins::GetValue(?)
  };
  Matrix GetValue2(Real void) {
    NameBlock ins = parent::GetInstancia(?); 
    Real e = ins::GetValue(?);
    Anything data = m * e
  };
  Matrix GetValue3(Real void) {
    NameBlock ins = parent::GetInstancia(?); 
    Anything data = m * {Real ins::GetValue(?)}
  }
]];

Set For(1, 10, Anything (Real i) {
  WriteLn(""""<<NObject);
  //Matrix parent::GetValue1(?);
  Matrix parent::GetValue2(?);
  //Matrix parent::GetValue3(?);
Empty});
}}}

El primer método sigue el uso habitual en mucha parte del código.

El segundo método es una forma de solucionarlo.

El tercer método se incluye porque esa forma sí sirvió para solucionar el problema en MMS aunque no parece que valga en este ejemplo.

"	defect	closed	highest	Mantainance	OOP	2.0.1	blocker	fixed		
