[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