[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
|