The image side changes were part of Squeak 4.2, and VM changes happened before that. I think that all the VMs currently in circulation will have this support, but I'm not certain of it.
For the interpreter VM, the changes were introduced here:
Name: VMMaker-dtl.175 Time: 25 May 2010, 8:01:19 am Ancestors: VMMaker-dtl.174
VMMaker 4.2.2 Reference Mantis 7473: VM changes for better finalization support Add Igor's VM changes to support better finalization (weak-finalizers-VM.1.cs merged with Alien support updates).
The Cog VMs would have had the support added in a similar time frame, although I don't recall exactly when.
HTH, Dave
On Fri, Dec 23, 2011 at 10:22:25AM -0500, Bob Arning wrote:
David,
While I was a little suspicious about the close placement of the init and test, my observation was from a 4.2 image with no changes in this area. Just curious what image/vm implements this *new* finalization.
Cheers, Bob
On 12/23/11 10:13 AM, David T. Lewis wrote:
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