[squeak-dev] Processor activeProcess suspendedContext notNil during simulation
christoph.thiede at student.hpi.uni-potsdam.de
christoph.thiede at student.hpi.uni-potsdam.de
Thu Dec 30 19:11:13 UTC 2021
On 2021-12-30T20:08:48+01:00, christoph.thiede at student.hpi.uni-potsdam.de wrote:
> Hi all,
>
> the docs on suspendedContext in the Process class comment say:
>
> if nil, then I am either the active process or I have been terminated. If not nil it is the Context at the hot end of my stack
>
> To me, this would indicate the following invariant:
>
> self assert: Processor activeProcess suspendedContext isNil.
>
> However, this invariant is violated if you simulate this expression rather executing it:
>
> (Process
> forBlock: [self assert: Processor activeProcess suspendedContext isNil]
> runUntil: [:ctx | ctx isDead or: [ctx selector = #defaultAction]])
> resume.
>
> Do you think this is a bug and should be fixed? We could do this by patching all assignors to suspendedContext in the 'changing suspended state' protocol on Process, maybe even as a small pattern like this:
>
> step
>
> ^ self doStep: [:ctx | ctx step]
>
> stepToCallee
> "Step until top context changes"
>
> ^ self doStep: [:ctx | | ctxt |
> ctxt := ctx.
> [ctxt == ctx] whileTrue: [ctxt := ctxt step].
> ctxt]
>
> doStep: aBlock
>
> | ctxt |
> ctxt := suspendedContext.
> suspendedContext := nil.
> ^ suspendedContext := Processor activeProcess
> evaluate: [aBlock value: ctxt]
> onBehalfOf: self
>
> Where #doStep: would handle the effective process and read, set to nil, and set again the suspendedContext of the receiver. Disclaimer: The above is pseudocode only so far.
>
> Or isn't this worth the overhead and the invariant above has only to be valid for processes that are executed by the VM? :-)
>
> Best,
> Christoph
>
> ---
> Sent from Squeak Inbox Talk
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20211230/03409854/attachment.html>
Addendum: In some situations, the suspendedContext during simulation might even be out of date, for instance, inside a #stepToSendOrReturn.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20211230/c5f1e3fc/attachment.html>
More information about the Squeak-dev
mailing list
|