Hi,
Here's the test case code I mentioned earlier. It's probably
my code
that's at fault, rather than the VM, but it's still very
strange behaviour.
When you run TerminationExperiment's #run, it can sometimes
reach
several tens of thousands of iterations of busyLoop before
faulting, but
will often fault before 20,000 iterations have completed on
my machine.
When you run #run2, things behave as I would have expected
them to
behave. No faulting occurs, and the process is sensibly
terminated.
Here's a selection of some of the faults I see from #run
after several
seconds. Each comes at the end of a single run of the
script, as attached.
Object: '' error: Invalid argument : must be a SmallInteger
SystemExceptions.WrongClass(Exception)>>signal
SystemExceptions.WrongClass class>>signalOn:mustBe:
SystemExceptions.WrongClass class>>signalOn:mustBe:
String(Object)>>checkIndexableBounds:put:
String>>at:put:
String class(ArrayedCollection class)>>with:
Character>>asString
[] in TextCollector>>showCr:
[] in Semaphore>>critical:
BlockClosure>>ensure:
Semaphore>>critical:
TextCollector>>showCr:
String(Object)>>printNl
TerminationExperiment>>busyLoop
TerminationExperiment>>run
UndefinedObject>>executeStatements
Object: nil error: did not understand #generality
MessageNotUnderstood(Exception)>>signal
UndefinedObject(Object)>>doesNotUnderstand:
#generality
SmallInteger>>+
FileStream(FileDescriptor)>>write:from:to:
FileStream>>flush
FileStream(Stream)>>nextPutAllFlush:
TextCollector>>primNextPutAll:
[] in TextCollector>>showCr:
[] in Semaphore>>critical:
BlockClosure>>ensure:
Semaphore>>critical:
TextCollector>>showCr:
String(Object)>>printNl
TerminationExperiment>>busyLoop
TerminationExperiment>>run
UndefinedObject>>executeStatements
Object: String error: Invalid argument 'b': must be a
SmallInteger
SystemExceptions.WrongClass(Exception)>>signal
SystemExceptions.WrongClass class>>signalOn:mustBe:
SystemExceptions.WrongClass class>>signalOn:mustBe:
String class(Behavior)>>new:
String(Collection)>>copyEmpty:
String(ArrayedCollection)>>copyFrom:to:
WriteStream>>contents
String(Object)>>printString
String(Object)>>printNl
TerminationExperiment>>busyLoop
TerminationExperiment>>run
UndefinedObject>>executeStatements
Object: 3 error: did not understand
#replaceFrom:to:with:startingAt:
MessageNotUnderstood(Exception)>>signal
SmallInteger(Object)>>doesNotUnderstand:
#replaceFrom:to:with:startingAt:
String(ArrayedCollection)>>copyFrom:to:
WriteStream>>contents
String(Object)>>printString
String(Object)>>printNl
TerminationExperiment>>busyLoop
TerminationExperiment>>run
UndefinedObject>>executeStatements
This one includes the end of the stdout, to illustrate an
odd doubling
of 'c':
'a'
'b'
'c''c'Object: nil error: did not understand #generality
MessageNotUnderstood(Exception)>>signal
UndefinedObject(Object)>>doesNotUnderstand:
#generality
SmallInteger>>+
FileStream(FileDescriptor)>>write:from:to:
FileStream>>flush
FileStream(Stream)>>nextPutAllFlush:
TextCollector>>primNextPutAll:
[] in TextCollector>>showCr:
[] in Semaphore>>critical:
BlockClosure>>ensure:
Semaphore>>critical:
TextCollector>>showCr:
String(Object)>>printNl
TerminationExperiment>>busyLoop
TerminationExperiment>>run
UndefinedObject>>executeStatements
Object: String error: did not understand #copyEmpty:
MessageNotUnderstood(Exception)>>signal
String class(Object)>>doesNotUnderstand: #copyEmpty:
WriteStream>>growCollection
WriteStream>>nextPut:
String>>printOn:
String(Object)>>printString
String(Object)>>printNl
TerminationExperiment>>busyLoop
TerminationExperiment>>run
UndefinedObject>>executeStatements
etc. etc.
Tony
--
[][][] Tony Garnock-Jones | Mob: +44 (0)7905 974 211
[][] LShift Ltd | Tel: +44 (0)20 7729 7060
[] [] http://www.lshift.net/ |
Email: tonyg lshift.net
_______________________________________________
help-smalltalk mailing list
help-smalltalk gnu.org
http://lists.gnu.org/mailman/listinfo/help-smalltalk
|