[rules-users] Memory leak in 5.2/5.3
Mark Proctor
mproctor at codehaus.org
Wed Oct 5 05:38:45 EDT 2011
On 04/10/2011 22:51, alopez wrote:
> Good news, I followed your advice and patched drools-core to prevent this,
> focusing on removing all listeners:
>
> AbstractWorkingMemory.java, line 1246:
>
> for ( Iterator it = this.__ruleBaseEventListeners.iterator(); it.hasNext();
> ) {
> this.ruleBase.removeEventListener( (RuleBaseEventListener) it.next()
> );
> }
>
> I changed that to:
>
> for ( Iterator it = this.ruleBase.getRuleBaseEventListeners().iterator();
> it.hasNext(); ) {
> this.ruleBase.removeEventListener( (RuleBaseEventListener) it.next()
> );
> }
>
> And now works OK, no memory leak.
That is not safe, and incorrect. __ruleBaseEventListener is the list of
rulebase listeners that the current WM adds ot the rulebase.
public void addEventListener(RuleBaseEventListener listener) {
this.ruleBase.addEventListener( listener );
this.__ruleBaseEventListeners.add( listener );
}
When the WM is disposed it should remove it's listeners only. so it
iterates __ruleBaseEventListener to find those, and remove them from the
rulebase .
What you are doing is iterating the rulebase and removing ALL it's
listeners, which means it'll remove listeners that belong to other wms.
If you are getting a leak like this, it means some how the wm is adding
listener, that is not removed - i.e. a listener is not added to
__ruleBaseEventListener but is still added to rulebase.
If you want this fixed for 5.3, we need a test producing the issue by
today.
Mark
>
> Thanks
>
>
>
> --
> View this message in context: http://drools.46999.n3.nabble.com/rules-users-Memory-leak-in-5-2-5-3-tp3280351p3394726.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
More information about the rules-users
mailing list