[Vm-dev] [VM-dev] Terminated process with zero pc
Denis Kudriashov
dionisiydk at gmail.com
Tue May 5 19:38:24 UTC 2020
Hi.
I encounter interesting behavior of process termination. I can't reproduce
it locally but I have constantly failing test on Pharo CI (as part of full
test suite) due to following conditions:
ended := false.
process := [ Processor activeProcess suspend. ended := true]
forkAt: Processor activePriority + 1.
self assert: process isSuspended description: 'should be suspended'.
process resume.
self assert: ended description: 'last statement is done'.
self assert: process suspendedContext pc equals: 0
When I try to run it locally the pc is always greater than #startpc.
On CI the test very rarely behaves same way. The process is always finished
(#ended is true) but in most of runs the pc of #terminate context is
somehow reset to zero (probably related to the order of overall test
suite). .
In Pharo succeed process ends here:
terminate
...........
self isActiveProcess ifTrue: [
thisContext terminateTo: nil.
self suspend ]
It seems that Context>>#terminateTo: can reset the pc to zero under some
condition (jitter related?).
So I wonder what could be the explanation?
I would like to understand this behavior before I will propose the change
for Pharo (#isTerminate implementation needs to be fixed).
Best regards,
Denis.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20200505/47990159/attachment.html>
More information about the Vm-dev
mailing list