[squeak-dev] The Inbox: KernelTests-jar.430.mcz

Eliot Miranda eliot.miranda at gmail.com
Tue Jun 7 17:45:40 UTC 2022


Hi Jaromir,

On Sun, Jun 5, 2022 at 2:11 PM <commits at source.squeak.org> wrote:

> A new version of KernelTests was added to project The Inbox:
> http://source.squeak.org/inbox/KernelTests-jar.430.mcz
>
> ==================== Summary ====================
>
> Name: KernelTests-jar.430
> Author: jar
> Time: 5 June 2022, 11:11:12.187824 pm
> UUID: 209031e0-7bc5-984a-94dd-b3c3a24216c3
> Ancestors: KernelTests-jar.429
>
> Oops, fix comment in previous test KernelTests-jar.429... Sorry for the
> noise.
>
> =============== Diff against KernelTests-jar.429 ===============
>
> Item was changed:
>   ----- Method: ProcessTest>>testTerminateHandlingUnwindError (in category
> 'tests') -----
>   testTerminateHandlingUnwindError
>         "Test an error inside an unwind block is handled correctly."
>
>         "Workspace example:
>                 [ [[Processor activeProcess terminate] ensure: [1/0]] on:
> ZeroDivide do: [] ] fork
>
>         ZeroDivide error should get caught by the handler without opening
> the Debugger.
>
>         To model this example as a test case we have to keep in mind that
> an error signal
>         in one thread cannot be caught in a different thread: if process
> 'p' signals an error
>         it won't be searching for a handler in the thread that sent 'p
> terminate' message.
>         So we can't do something like:
> +               p := [ [ [Semaphore new wait] ensure: [1/0] ] on:
> ZeroDivide do: [] ] fork.
> -               p := [ [ [Semaphore new wait] ensure: unwindBlock ] on:
> ZeroDivide do: [] ] fork.
>                 Processor yield.
>                 self shouldnt: [p terminate] raise: Error
>         Instead, in order to catch the situation the ZeroDivide error is
> not caught within 'p',
>         we try to catch the UnhandledError raised in 'p' indicating the
> ZeroDivide has been
>         missed. "
>
>         | p error unwindBlock |
>         unwindBlock := [[1/0] on: UnhandledError do: [error := true]].
>         p := [ [ [Semaphore new wait] ensure: unwindBlock ] on: ZeroDivide
> do: [] ] fork.
>         Processor yield.
>         self assert: p isBlocked.
>         error := false.
>         p terminate.
>         self deny: error.
>         self assert: p isTerminated!
>
>
Why not something like
        | p errorUnhandled errorCaught unwindBlock |
        unwindBlock := [[1/0] on: UnhandledError do: [errorUnhandled :=
true]].
        p := [ [ [Semaphore new wait] ensure: unwindBlock ]
                        on: ZeroDivide
                        do: [errorCaught := true] ] fork.
        Processor yield.
        self assert: p isBlocked.
        errorUnhandled := errorCaught := false.
        p terminate.
        self deny: errorUnhandled.
        self assert: errorCaught.
        self assert: p isTerminated!

?  And I see no point to the unwindBlock temporary.  Why not just put the
code inline?

_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220607/bb14def8/attachment.html>


More information about the Squeak-dev mailing list