[Vm-dev] behavior issues with windows vm?

John M McIntosh johnmci at smalltalkconsulting.com
Fri Jun 19 02:43:55 UTC 2009

Given a Pharo0.1Core-10204.image

with the following changes to collect startup times in  
SystemDictionary>>send: toClassesNamedIn: with:

Seem simple?

I hacked usage of FilePackage log: because it was simple and wanted to  
record times  & progress to a file in the VM directory.

But the windows VM coughs up
the dialog saying the file does not exist, create a new file or choose  
another file.
This does not happen on mac or linux?

The file is not created via the hopeful code in the modified  

It does not write a debug log, does not allow mouse clicks, keyboard  
entry etc, in general it's obvious to any input activity at this point.

Now I wondering here if sandboxing for etoys is leaping in and being  
Is there some magical call that is done later in the startup:  
processing that ok's the ability to create files?
And that I *know* later after system startup I *can* invoke  
FilePackage log: 'foo' and we are happy if I rip out the file access  
in log:

Oh and I'm here because WikiServer wouldn't start on Windows, well  
because I've ripped out lots of eToy stuff, like the
the eToy startup security sandboxing which isn't needed on the iPhone.

changes to base 10204 image

SystemDictionary>>send: startUpOrShutDown toClassesNamedIn:  
startUpOrShutDownList with: argument
	"Send the message #startUp: or #shutDown: to each class named in the  
	The argument indicates if the system is about to quit (for  
#shutDown:) or if
	the image is resuming (for #startUp:).
	If any name cannot be found, then remove it from the list."

	| removals class t6 t7 |
	removals := OrderedCollection new.
	startUpOrShutDownList do:
		[:name |
		class := self at: name ifAbsent: [nil].
		class == nil
			ifTrue: [removals add: name]
			ifFalse: [class isInMemory ifTrue:
						[t6 := Time millisecondClockValue.
						class perform: startUpOrShutDown with: argument.
						startUpOrShutDown = #startUp:
								ifTrue: [t7 := class printString , ' ' , (Time  
millisecondClockValue - t6) printString.
									FilePackage log: t7]]]].

	"Remove any obsolete entries, but after the iteration"
	startUpOrShutDownList removeAll: removals

		ifNil: [LogFileStream := StandardFileStream forceNewFileNamed:  
			LogFileStream setToEnd].
	LogFileStream closed
		ifTrue: [LogFileStream reopen.
			LogFileStream setToEnd].
	^ LogFileStream

Oh at shutdown: time we need to do a FilePackage closeLog, where that  
happens is an exercise for the reader.

John M. McIntosh <johnmci at smalltalkconsulting.com>   Twitter:   
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com

More information about the Vm-dev mailing list