[Vm-dev] primitive 87 resume

Florin Mateoc florin.mateoc at gmail.com
Thu May 20 23:23:28 UTC 2021


Hi Eliot,

Indeed, that's where I discovered the anomaly - but I think that is not a
good justification, that method looks bogus to me.
It does not actually need to resume anything, it should read

    evaluationProcess := [
        result := aBlock value.
        evaluated := true.
        delay signalWaitingProcess;
            unschedule.
        ] forkNamed: 'Process to evaluate should:
notTakeMoreThanMilliseconds:'.

instead of

    evaluationProcess := [
        result := aBlock value.
        evaluated := true.
        delay unschedule.
        testProcess resume ] forkNamed: 'Process to evaluate should:
notTakeMoreThanMilliseconds:'.

Cheers,
Florin

On Thu, May 20, 2021 at 6:15 PM Eliot Miranda <eliot.miranda at gmail.com>
wrote:

>
> Hi Florin,
>
>     here's my comment in the implementation from 2010:
>
> "Personally I would like to check MyList, which should not be one of the
> elements of the scheduler lists.
> But there are awful race conditions in things like should:notTakeMoreThan:
> that mean we can't.
> eem 9/27/2010 23:08. e.g.
>
> So it appears that there may be issues that make it difficult to change
> the primitive.
>
> On Wed, May 19, 2021 at 4:05 PM Florin Mateoc <florin.mateoc at gmail.com>
> wrote:
>
>>
>> Hi all,
>>
>> In the method Process>>resume, which invokes primitive 87, the comment
>> states that the primitive should fail if the process is already waiting in
>> a queue.
>> But the implementation does not do that. If we execute (inspect) the
>> snippet:
>>
>> | evaluationProcess result delay testProcess |
>> delay := Delay forMilliseconds: 50.
>> testProcess := Processor activeProcess.
>> evaluationProcess := [
>>   delay unschedule.
>>   result := testProcess isBlocked.
>>   testProcess resume] fork.
>> delay wait.
>> result
>>
>> it returns true (and no primitive failed error occurs), which means we
>> successfully resumed a blocked (waiting on a semaphore) process.
>> I also checked in VMMaker and indeed, the code does not check if the
>> process is on a queue or not before just putting it on a runnable list.
>>
>> What do you think? Should the comment be changed or the implementation?
>>
>> Florin
>>
>
>
> --
> _,,,^..^,,,_
> best, Eliot
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20210520/33d6e21b/attachment-0001.html>


More information about the Vm-dev mailing list