David T. Lewis uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-dtl.469.mcz
==================== Summary ====================
Name: Collections-dtl.469
Author: dtl
Time: 30 December 2011, 12:57:50.064 am
UUID: f8d7d7a5-e127-4108-95ae-6ef48ac43d86
Ancestors: Collections-cmm.468
Fix weak finalization thrashing, root cause of user interrupt issues.
Perform the check for VM support of new finalization once at image startUp time. This prevents the weak finalization process from creating new weak references that result in thrashing between VM and image as the VM signals the the image to clean up weak references, and the finalization process produces additional weak to be removed.
With this change the finalization process is much less active, and user interrupt handling works as intended such that any of the following can interrupted in the expected way:
"[true] whileTrue"
"[[true] whileTrue] forkAt: Processor userSchedulingPriority + 1"
"Smalltalk createStackOverflow"
"[Smalltalk createStackOverflow] forkAt: Processor userSchedulingPriority + 1"
=============== Diff against Collections-cmm.468 ===============
Item was changed:
----- Method: WeakArray class>>finalizationProcess (in category 'private') -----
finalizationProcess
+ | initialized |
+ initialized := false.
+ [FinalizationSemaphore wait.
+ initialized ifFalse: ["check VM capability once at image startup time"
+ WeakFinalizationList initTestPair.
+ Smalltalk garbageCollect.
- [ WeakFinalizationList initTestPair.
- FinalizationSemaphore wait.
- FinalizationLock critical:
- [
WeakFinalizationList checkTestPair.
+ initialized := true].
+ FinalizationLock critical:
+ [FinalizationDependents do:
+ [ :weakDependent |
- FinalizationDependents do:
- [:weakDependent |
weakDependent ifNotNil:
[weakDependent finalizeValues]]]
ifError:
+ [:msg :rcvr | rcvr error: msg]] repeat!
- [:msg :rcvr | rcvr error: msg] ] repeat!
David T. Lewis uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-dtl.469.mcz
==================== Summary ====================
Name: Collections-dtl.469
Author: dtl
Time: 30 December 2011, 12:57:50.064 am
UUID: f8d7d7a5-e127-4108-95ae-6ef48ac43d86
Ancestors: Collections-cmm.468
Fix weak finalization thrashing, root cause of user interrupt issues.
Perform the check for VM support of new finalization once at image startUp time. This prevents the weak finalization process from creating new weak references that result in thrashing between VM and image as the VM signals the the image to clean up weak references, and the finalization process produces additional weak to be removed.
With this change the finalization process is much less active, and user interrupt handling works as intended such that any of the following can interrupted in the expected way:
"[true] whileTrue"
"[[true] whileTrue] forkAt: Processor userSchedulingPriority + 1"
"Smalltalk createStackOverflow"
"[Smalltalk createStackOverflow] forkAt: Processor userSchedulingPriority + 1"
=============== Diff against Collections-cmm.468 ===============
Item was changed:
----- Method: WeakArray class>>finalizationProcess (in category 'private') -----
finalizationProcess
+ | initialized |
+ initialized := false.
+ [FinalizationSemaphore wait.
+ initialized ifFalse: ["check VM capability once at image startup time"
+ WeakFinalizationList initTestPair.
+ Smalltalk garbageCollect.
- [ WeakFinalizationList initTestPair.
- FinalizationSemaphore wait.
- FinalizationLock critical:
- [
WeakFinalizationList checkTestPair.
+ initialized := true].
+ FinalizationLock critical:
+ [FinalizationDependents do:
+ [ :weakDependent |
- FinalizationDependents do:
- [:weakDependent |
weakDependent ifNotNil:
[weakDependent finalizeValues]]]
ifError:
+ [:msg :rcvr | rcvr error: msg]] repeat!
- [:msg :rcvr | rcvr error: msg] ] repeat!
David T. Lewis uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-dtl.469.mcz
==================== Summary ====================
Name: Collections-dtl.469
Author: dtl
Time: 30 December 2011, 12:57:50.064 am
UUID: f8d7d7a5-e127-4108-95ae-6ef48ac43d86
Ancestors: Collections-cmm.468
Fix weak finalization thrashing, root cause of user interrupt issues.
Perform the check for VM support of new finalization once at image startUp time. This prevents the weak finalization process from creating new weak references that result in thrashing between VM and image as the VM signals the the image to clean up weak references, and the finalization process produces additional weak to be removed.
With this change the finalization process is much less active, and user interrupt handling works as intended such that any of the following can interrupted in the expected way:
"[true] whileTrue"
"[[true] whileTrue] forkAt: Processor userSchedulingPriority + 1"
"Smalltalk createStackOverflow"
"[Smalltalk createStackOverflow] forkAt: Processor userSchedulingPriority + 1"
=============== Diff against Collections-cmm.468 ===============
Item was changed:
----- Method: WeakArray class>>finalizationProcess (in category 'private') -----
finalizationProcess
+ | initialized |
+ initialized := false.
+ [FinalizationSemaphore wait.
+ initialized ifFalse: ["check VM capability once at image startup time"
+ WeakFinalizationList initTestPair.
+ Smalltalk garbageCollect.
- [ WeakFinalizationList initTestPair.
- FinalizationSemaphore wait.
- FinalizationLock critical:
- [
WeakFinalizationList checkTestPair.
+ initialized := true].
+ FinalizationLock critical:
+ [FinalizationDependents do:
+ [ :weakDependent |
- FinalizationDependents do:
- [:weakDependent |
weakDependent ifNotNil:
[weakDependent finalizeValues]]]
ifError:
+ [:msg :rcvr | rcvr error: msg]] repeat!
- [:msg :rcvr | rcvr error: msg] ] repeat!
Colin Putney uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-cwp.467.mcz
==================== Summary ====================
Name: System-cwp.467
Author: cwp
Time: 28 December 2011, 10:43:22.531 pm
UUID: f047d655-bc2b-4ea1-a7a8-c091bac02b0b
Ancestors: System-laza.466
SystemOrganizer>>classify:under: now uses #at:ifAbsent: to look up a class when generating system change notifications. This prevents bogus change notifications and walk backs when running tests against SystemOrganizer instances.
=============== Diff against System-laza.466 ===============
Item was changed:
----- Method: SystemOrganizer>>classify:under: (in category 'accessing') -----
classify: element under: newCategory
+ | oldCategory class |
- | oldCategory |
oldCategory := self categoryOfElement: element.
super classify: element under: newCategory.
+ class := Smalltalk at: element ifAbsent: [^ self].
SystemChangeNotifier uniqueInstance
+ class: class
- class: (Smalltalk at: element)
recategorizedFrom: oldCategory
to: newCategory !
Colin Putney uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-cwp.467.mcz
==================== Summary ====================
Name: System-cwp.467
Author: cwp
Time: 28 December 2011, 10:43:22.531 pm
UUID: f047d655-bc2b-4ea1-a7a8-c091bac02b0b
Ancestors: System-laza.466
SystemOrganizer>>classify:under: now uses #at:ifAbsent: to look up a class when generating system change notifications. This prevents bogus change notifications and walk backs when running tests against SystemOrganizer instances.
=============== Diff against System-laza.466 ===============
Item was changed:
----- Method: SystemOrganizer>>classify:under: (in category 'accessing') -----
classify: element under: newCategory
+ | oldCategory class |
- | oldCategory |
oldCategory := self categoryOfElement: element.
super classify: element under: newCategory.
+ class := Smalltalk at: element ifAbsent: [^ self].
SystemChangeNotifier uniqueInstance
+ class: class
- class: (Smalltalk at: element)
recategorizedFrom: oldCategory
to: newCategory !
Colin Putney uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-cwp.467.mcz
==================== Summary ====================
Name: System-cwp.467
Author: cwp
Time: 28 December 2011, 10:43:22.531 pm
UUID: f047d655-bc2b-4ea1-a7a8-c091bac02b0b
Ancestors: System-laza.466
SystemOrganizer>>classify:under: now uses #at:ifAbsent: to look up a class when generating system change notifications. This prevents bogus change notifications and walk backs when running tests against SystemOrganizer instances.
=============== Diff against System-laza.466 ===============
Item was changed:
----- Method: SystemOrganizer>>classify:under: (in category 'accessing') -----
classify: element under: newCategory
+ | oldCategory class |
- | oldCategory |
oldCategory := self categoryOfElement: element.
super classify: element under: newCategory.
+ class := Smalltalk at: element ifAbsent: [^ self].
SystemChangeNotifier uniqueInstance
+ class: class
- class: (Smalltalk at: element)
recategorizedFrom: oldCategory
to: newCategory !
Chris Muller uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-cmm.466.mcz
==================== Summary ====================
Name: Collections-cmm.466
Author: cmm
Time: 29 November 2011, 9:26:57.286 pm
UUID: 3a05d4e5-8c72-4b50-85a2-40eba66bc358
Ancestors: Collections-ul.465
Allow subclasses to override the internal 'array' of a HashedCollection.
=============== Diff against Collections-ul.465 ===============
Item was added:
+ ----- Method: HashedCollection class>>arrayType (in category 'private') -----
+ arrayType
+ ^ Array!
Item was changed:
----- Method: HashedCollection>>growTo: (in category 'private') -----
growTo: anInteger
"Grow the elements array and reinsert the old elements"
| oldElements |
oldElements := array.
+ array := self class arrayType new: anInteger.
- array := Array new: anInteger.
self noCheckNoGrowFillFrom: oldElements!
Item was changed:
----- Method: HashedCollection>>initialize: (in category 'private') -----
initialize: n
"Initialize array to an array size of n"
+ array := self class arrayType new: n.
- array := Array new: n.
tally := 0!
Chris Muller uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-cmm.466.mcz
==================== Summary ====================
Name: Collections-cmm.466
Author: cmm
Time: 29 November 2011, 9:26:57.286 pm
UUID: 3a05d4e5-8c72-4b50-85a2-40eba66bc358
Ancestors: Collections-ul.465
Allow subclasses to override the internal 'array' of a HashedCollection.
=============== Diff against Collections-ul.465 ===============
Item was added:
+ ----- Method: HashedCollection class>>arrayType (in category 'private') -----
+ arrayType
+ ^ Array!
Item was changed:
----- Method: HashedCollection>>growTo: (in category 'private') -----
growTo: anInteger
"Grow the elements array and reinsert the old elements"
| oldElements |
oldElements := array.
+ array := self class arrayType new: anInteger.
- array := Array new: anInteger.
self noCheckNoGrowFillFrom: oldElements!
Item was changed:
----- Method: HashedCollection>>initialize: (in category 'private') -----
initialize: n
"Initialize array to an array size of n"
+ array := self class arrayType new: n.
- array := Array new: n.
tally := 0!
Chris Muller uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-cmm.466.mcz
==================== Summary ====================
Name: Collections-cmm.466
Author: cmm
Time: 29 November 2011, 9:26:57.286 pm
UUID: 3a05d4e5-8c72-4b50-85a2-40eba66bc358
Ancestors: Collections-ul.465
Allow subclasses to override the internal 'array' of a HashedCollection.
=============== Diff against Collections-ul.465 ===============
Item was added:
+ ----- Method: HashedCollection class>>arrayType (in category 'private') -----
+ arrayType
+ ^ Array!
Item was changed:
----- Method: HashedCollection>>growTo: (in category 'private') -----
growTo: anInteger
"Grow the elements array and reinsert the old elements"
| oldElements |
oldElements := array.
+ array := self class arrayType new: anInteger.
- array := Array new: anInteger.
self noCheckNoGrowFillFrom: oldElements!
Item was changed:
----- Method: HashedCollection>>initialize: (in category 'private') -----
initialize: n
"Initialize array to an array size of n"
+ array := self class arrayType new: n.
- array := Array new: n.
tally := 0!
Chris Muller uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-cmm.468.mcz
==================== Summary ====================
Name: Collections-cmm.468
Author: cmm
Time: 26 December 2011, 12:56:38.443 pm
UUID: b0f39ad3-ea43-4c20-848b-adbd7e61224d
Ancestors: Collections-cmm.466
Merged.
=============== Diff against Collections-ul.465 ===============
Item was added:
+ ----- Method: HashedCollection class>>arrayType (in category 'private') -----
+ arrayType
+ ^ Array!
Item was changed:
----- Method: HashedCollection>>growTo: (in category 'private') -----
growTo: anInteger
"Grow the elements array and reinsert the old elements"
| oldElements |
oldElements := array.
+ array := self class arrayType new: anInteger.
- array := Array new: anInteger.
self noCheckNoGrowFillFrom: oldElements!
Item was changed:
----- Method: HashedCollection>>initialize: (in category 'private') -----
initialize: n
"Initialize array to an array size of n"
+ array := self class arrayType new: n.
- array := Array new: n.
tally := 0!