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

James Foster via Glass glass at lists.gemtalksystems.com
Mon Aug 24 13:34:32 PDT 2015


> On Aug 24, 2015, at 1:04 PM, Mariano Martinez Peck <marianopeck at gmail.com> wrote:
> 
> 
> 
> On Mon, Aug 24, 2015 at 4:49 PM, James Foster <james.foster at gemtalksystems.com <mailto:james.foster at gemtalksystems.com>> wrote:
> Mariano,
> 
> What happens if you run #’cleanupBag’ on the instance?
> 
> 
> Nothing, I just tried. 'components' answers the same and a MFC does not GC those.

Okay. We might have a bit more to do if you have other sessions logged in… Next try #’_unsafeCleanupBag’ and see if that removes the extra contents (see the method comments and also see #’centralizeSessionElements’). You should not need to do the full MFC to verify that they are actually gone from the RcIdentityBag.

> 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).
> 
> I do not folliw. when I should send #cleanupBag? Every time I remove/add? Or as part of my maintenance script?

I’d suggest that #”centralizeSessionElements’ and #’cleanupBag’ be part of a maintenance process when other sessions are not logged in.

> Also.... in the ProgGuide I found NO reference to #cleanupBag.

Good point. The docs briefly mention cleanup in RcQueue but should discuss it for other classes. I’ll put in a docs request.

>  Where should I read more about it?

Other than the docs, I’d suggest https://www.youtube.com/watch?v=1rb_A8hwKmc <https://www.youtube.com/watch?v=1rb_A8hwKmc>.

James

> Thanks,
> 
> 
>  
> 
> James
> 
>> On Aug 24, 2015, at 12:28 PM, Mariano Martinez Peck via Glass <glass at lists.gemtalksystems.com <mailto: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 <mailto:Glass at lists.gemtalksystems.com>
>> http://lists.gemtalksystems.com/mailman/listinfo/glass <http://lists.gemtalksystems.com/mailman/listinfo/glass>
> 
> 
> 
> 
> -- 
> Mariano
> http://marianopeck.wordpress.com <http://marianopeck.wordpress.com/>

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


More information about the Glass mailing list