[Glass] RcIdentityBag holding deleted objects via instVar "components"?

James Foster via Glass glass at lists.gemtalksystems.com
Mon Aug 24 12:49:11 PDT 2015


Mariano,

What happens if you run #’cleanupBag’ on the instance?

To manage reduced conflicts there are separate bags for each possible session, one for adding and one for removing. If you add in one session and remove in another then the collection will not have the object because the number of removals matches the number of adds. To provide the reduced conflict behavior a session does not modify the cache for another session unless you do a cleanup (which is documented to risk a conflict).

James

> On Aug 24, 2015, at 12:28 PM, Mariano Martinez Peck via Glass <glass at lists.gemtalksystems.com> wrote:
> 
> Hi guys, 
> 
> I use RcIdentityBag as the "collection" class for the typical storage of domain persistent objects. I am getting an issue now where I cleaned such a collection but things are not GCed. 
> 
> I have one object whose print string looks like "aRcIdentityBag( )" and "self size" does answer zero. However, 
> 
> self instVarNamed: 'components' ----->
> 
>  anArray( anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( aDpOfxPriceRepository), anIdentityBag( aDpOfxPriceRepository), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ), anIdentityBag( ))
> 
> WTF?  The collection is empty, but the internal 'components' instVar is holding the already deleted objects that were in the collection (DpOfxPriceRepository instances).
> 
> BTW...I remember a similar issue with the ObjectLogEntry  whose ObjectQueue is a RcQueue. I remembered that I was not GCing objects while I was trying:
> 
> ObjectLogEntry class >> emptyLog
> 	"expect the caller to abort, acquire lock, and commit if necessary"
> 
>     self objectQueue removeAll.
>     ObjectLog := nil.
> 
> 
> That was not GCing. Once I run #initialize instead, suddenly things got GCed. So since the code there does a #removeAll too I wonder if it wasn't the same issue. Not sure since RcQueue does not have a 'component' instVar...but just wondering.
> 
> 
> Any idea what could be wrong?
> 
> -- 
> Mariano
> http://marianopeck.wordpress.com <http://marianopeck.wordpress.com/>
> _______________________________________________
> Glass mailing list
> Glass at lists.gemtalksystems.com
> http://lists.gemtalksystems.com/mailman/listinfo/glass

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20150824/a99a63d9/attachment-0001.html>


More information about the Glass mailing list