[squeak-dev] Re: The broken user interrupt, or the saga of 100000 factorial.

David T. Lewis lewis at mail.msen.com
Fri Dec 23 15:13:18 UTC 2011


On Fri, Dec 23, 2011 at 07:39:41AM -0500, Bob Arning wrote:
> I've seen suspicious behavior (tough time interrupting and lots of 
> finalization in MessageTally reports) in my 4.2 image, so I thought I'd 
> look at applying this fix. One thing I'm a little puzzled about: 
> HasNewFinalization is false in my image (I'm using a Cog that's a few 
> months old). Under what conditions is it true?

I think you have spotted a timing problem here. I put the initTestPair
and checkTestPair calls together in a startUp: method, which is
wrong because it does not give the VM an opportunity to do its
updates, so the results of the test are not valid.

This is not exactly elegant, but if you force a garbage collection
between initTestPair and checkTestPair, the test will work properly.

WeakArray class>>startUp: resuming
	resuming ifFalse: [ ^self ].
	"Check if new finalization is supported by the VM"
	WeakFinalizationList initTestPair.
	Smalltalk garbageCollect.
	WeakFinalizationList checkTestPair.
	self restartFinalizationProcess.

A better fix is needed - sorry about that. I'm not sure if I'll
have a chance to look at this today, but the important thing is
to arrange for the check to be done when the image is started,
but not to continue repeating the test after it has been
successfully performed.

Dave




More information about the Squeak-dev mailing list