I was benchmarking the VM late last night and checking startup time
and again noticed we invoke flushExternalPrimitives to scan over all
"Flush the references to external functions from plugin
primitives. This will force a reload of those primitives when
accessed next. "
On August 6, 2003 I had written a note "[ENH][VM] faster image
startup" about this and had a change set to reset only the method
contexts that we had noticed needed being reset in an earlier scan of
memory when we were either adjusting t the oops offset or to address
However the comments in initialCleanup imply we only should do this
for earlier VM, not 3.8 or perhaps 3.6/3.7
I recall some discussion about changes to image saving so that new
images wouldn't have this problem and then not require the scan.
So did that fix get lost somewhere, or was an issue found and we
should again look at how many times we scan oops memory at startup time?
"Images written by VMs earlier than 3.6/3.7 will wrongly have
the root bit set on the active context. Besides clearing the root
bit, we treat this as a marker that these images also lack a cleanup
of external primitives (which has been introduced at the same time
when the root bit problem was fixed). In this case, we merely flush
them from here."
((self longAt: activeContext) bitAnd: RootBit) = 0 ifTrue:
[^nil]. "root bit is clean"
"Clean root bit of activeContext"
self longAt: activeContext put: ((self longAt: activeContext)
"Clean external primitives"
John M. McIntosh <[hidden email]> 1-800-477-2659
Corporate Smalltalk Consulting Ltd. http://www.smalltalkconsulting.com ========================================================================