flushExternalPrimitives usage?

Previous Topic Next Topic
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

flushExternalPrimitives usage?

I was benchmarking the VM late last night and checking startup time  
and again noticed we invoke flushExternalPrimitives to scan over all  
object memory


"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  
intel/powerpc issues.

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)  
bitAnd: AllButRootBit).
     "Clean external primitives"
     self flushExternalPrimitives.

John M. McIntosh <[hidden email]> 1-800-477-2659
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com