Hi all,

for help you to understand the problem, I have make a small TestCase.

This memory leak is not "infinity", the maximum size of this memory leak is "~ size(WorkingMemory + Facts)  x  number rules on the rules base".


Yves


<<MemoryLeakTest.zip>>
-----Message d'origine-----
> De :  Galante, Yves 
> Objet :       Potential multi thread error and "smal" memory leak
>
> Hi,
>
> Class VariableContextEntry and ReturnValueContextEntry are
> instantiated
> when Package.addRule called.
> This class are linked from "Package rules".
>
>          "Package => ... =>  VariableContextEntry
>
> But class have a reference  to the InternalWorkingMemory !
>
>          "Package => ... => VariableContextEntry => Workingmemory"
>
> When this pseudo code is executed, at the end of the execution,
> WorkingMemory need to be garbage collected, but it isn't
> because she is
> referenced by ReturnValueContextEntry and/or
> VariableContextEntry, and
> this class keeps an reference to the WorkingMemory.
>
> I think this can be generate some error in multi thread and make an
> "smal" memory leak.
>
> It is right ?
> The membre workingMemory can't be removed from
> VariableContextEntry/ReturnValueContextEntry ?
> ____________________
>
> pseudo code (source : ReteooMannersTest)  :
>
> final Package ruleBase = new Package( "org.drools.examples.manners" );
> ruleBase.addRule( getAssignFirstSeatRule() );
> ...
> SatefulSession session = ruleBase.newStatefulSession(false);
> session.insert(new Count(1));
> session.fireAllRules();
> session.dispose();
> session = null;
> System.gc();
>
> After GC,  workingMemory (session) need to be finally but she isn't
> because VariableContextEntry/ReturnValueContextEntry keep a
> reference at
> the workingMemory.
>
> Thanks for your response
>
> Yves
>
>