<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
    <title></title>
  </head>
  <body bgcolor="#ffffff" text="#000000">
    Hi Jaromir, hi all,<br>
    <br>
    This is a most impressive work!<br>
    <br>
    It made me remember this talk given by Martin McClure in Smalltalks
    2019: <a class="moz-txt-link-freetext" href="https://www.youtube.com/watch?v=AvM5YrjK9AE">https://www.youtube.com/watch?v=AvM5YrjK9AE</a> . At minute 22:00,
    Martin states the behavior he expects from #terminate, and shows a
    test. I tried his test in Cuis, and sometimes (but not always) it
    failed. Jaromir, with your code, Martin's test now pass! In
    addition, I ran the existing Process tests, and none is made to
    fail.<br>
    <br>
    I also tried all your tests and examples. They cover a really broad
    and exhaustive set of scenarios! A few comments:<br>
    - Many examples don't work in Cuis, because we made #fork answer nil
    (and not the forked process). The reason for this is explained in
    the comment in #fork. The pattern is instead of "p := [stuff] fork."
    do "p := [stuff] newProcess. p resume." With this change, all the
    examples work as expected.<br>
    - The notes for a few examples speak of crashes in Cuis. I pushed
    some fixes a few days ago, and now cmd-. works as expected. The
    examples behave the same as in Squeak. Please pull your repos.<br>
    <br>
    Additionally, this remark of you (Jaromir) I don't understand:<br>
    /////<br>
    ad 1) The #isTerminated condition `suspendedContext pc >
    suspendedContext startpc` is always met after executing the first
    instruction of the bottom context – generally not a sign of a
    terminated process.<br>
    \\\\\\<br>
    I don't see that condition neither in Squeak (#19435) nor Cuis
    (#4567).<br>
    <br>
    In any case, I think this is a great contribution, It perfectly
    fixes a lot of broken behavior, and doesn't seem to bring problems.
    I'm all for integrating it.<br>
    <br>
    Jaromir, do you intend to turn the rest of your examples into tests?
    I think we should also do that, so we integrate all your experiments
    and what you learnt.<br>
    <br>
    Thanks!<br>
    <pre class="moz-signature" cols="72">-- 
Juan Vuletich
<a class="moz-txt-link-abbreviated" href="http://www.cuis-smalltalk.org">www.cuis-smalltalk.org</a>
<a class="moz-txt-link-freetext" href="https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev">https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev</a>
<a class="moz-txt-link-freetext" href="https://github.com/jvuletich">https://github.com/jvuletich</a>
<a class="moz-txt-link-freetext" href="https://www.linkedin.com/in/juan-vuletich-75611b3">https://www.linkedin.com/in/juan-vuletich-75611b3</a>
@JuanVuletich</pre>
    <br>
    <br>
    On 4/13/2021 6:02 AM, Jaromir Matas via Cuis-dev wrote:
    <blockquote
cite="mid:BN7PR08MB3842E79B1A187E90AB53A3E1EE4F9@BN7PR08MB3842.namprd08.prod.outlook.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]-->
      <style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 5 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
h1
        {mso-style-priority:9;
        mso-style-link:"Heading 1 Char";
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:24.0pt;
        font-family:"Calibri",sans-serif;
        font-weight:bold;}
h2
        {mso-style-priority:9;
        mso-style-link:"Heading 2 Char";
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:18.0pt;
        font-family:"Calibri",sans-serif;
        font-weight:bold;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.Heading1Char
        {mso-style-name:"Heading 1 Char";
        mso-style-priority:9;
        mso-style-link:"Heading 1";
        font-family:"Calibri",sans-serif;
        font-weight:bold;}
span.Heading2Char
        {mso-style-name:"Heading 2 Char";
        mso-style-priority:9;
        mso-style-link:"Heading 2";
        font-family:"Calibri",sans-serif;
        font-weight:bold;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
      <div class="WordSection1">
        <p class="MsoNormal">Hi Hernan, hi all,</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">I'm enclosing a slightly improved version
          of #terminate along with a few semantic tests covering basic
          nested unwind scenarios (terminating an active, suspended,
          blocked and ready processes in nested unwind blocks). More
          tests can be based on examples in the enclosed collection -
          for scenarios involving non-local returns and errors during
          termination and especially their combinations. A few examples
          explore resiliency of the code exposed to pathologic
          situations (nested termination or errors).</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Thanks again for your time. I look forward
          to your response.</p>
        <p class="MsoNormal">best,</p>
        <p class="MsoNormal">Jaromir</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <div style="border-right: medium none; border-width: 1pt medium
          medium; border-style: solid none none; border-color: rgb(225,
          225, 225) -moz-use-text-color -moz-use-text-color; padding:
          3pt 0in 0in;">
          <p class="MsoNormal" style="border: medium none; padding:
            0in;"><b>From: </b><a moz-do-not-send="true"
              href="mailto:cuis-dev@lists.cuis.st">Jaromir Matas via
              Cuis-dev</a><br>
            <b>Sent: </b>Sunday, April 11, 2021 10:51<br>
            <b>To: </b><a moz-do-not-send="true"
              href="mailto:hernan.wilkinson@10pines.com">Hernan
              Wilkinson</a>; <a moz-do-not-send="true"
              href="mailto:cuis-dev@lists.cuis.st">
              Discussion of Cuis Smalltalk</a><br>
            <b>Cc: </b><a moz-do-not-send="true"
              href="mailto:mail@jaromir.net">Jaromir Matas</a><br>
            <b>Subject: </b>Re: [Cuis-dev] Unwind mechanism during
            termination is broken and inconsistent</p>
        </div>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Hi Hernan,<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Thank you very much for your immediate
          response.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">> Hi Jaromir,<o:p></o:p></p>
        <p class="MsoNormal">>  thank you for sharing this with us!
          It looks very interesting.<o:p></o:p></p>
        <p class="MsoNormal">>  As you can imagine a change of this
          magnitude and impact has to be analyzed in detail and tested
          rigorously, and that will take time.
          <o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Oh absolutely, I'm aware of that and
          wouldn't expect anything less :)<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">>  It would help us deeply if there are
          tests that reproduce the errors, do you have them?
          <o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Yes, I have a set of Squeak tests I'm
          planning to extend and make presentable ASAP. I'll "translate"
          them to Cuis too.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">>  If not, could you write them? I know
          it is a difficult problem to test but if we could have
          automated tests for this it would help a lot.
          <o:p></o:p></p>
        <p class="MsoNormal">>  Also, it would help to know how you
          tested it. <o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">That's important: I tested solely for
          'correct' semantics in a series of simple scenarios I'll send
          you.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">>  For example, have you tried in stress
          conditions? <o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Nope, I'm not that experienced
          unfortunately :)<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">>  for example with an app that uses
          many processes (ie. seaside or any web framework). Please, do
          not take this question as disrespectful, but again,<o:p></o:p></p>
        <p class="MsoNormal">>  it is a change with a big impact and
          we need to be sure it will keep the current behavior (but the
          bugs of course) and it will not introduce new bugs.<o:p></o:p></p>
        <p class="MsoNormal">>  I'm also wondering if there could be
          systems that are implemented as these bugs you mention were
          "features" ...<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">That's an interesting question. I realized
          the sooner bugs this deep in the system are fixed the less
          chance someone learns to 'live' with them, crippling their
          code, or even uses them as 'features'. I just hope it's not
          the case. How would we know? Well... actually here's one:
          while testing it on Pharo I found two tests that sort of
          'legitimize' or use the Unwind error (bug) to achieve certain
          behavior... (if I interpret the tests correctly).<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Thanks again for your questions!<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Jaromir<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">>  Thanks!<o:p></o:p></p>
        <p class="MsoNormal">>  Hernan.<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <div style="border-right: medium none; border-width: 1pt medium
          medium; border-style: solid none none; border-color: rgb(225,
          225, 225) -moz-use-text-color -moz-use-text-color; padding:
          3pt 0in 0in;">
          <p class="MsoNormal"><b>From: </b><a moz-do-not-send="true"
              href="mailto:hernan.wilkinson@10pines.com">Hernan
              Wilkinson</a><br>
            <b>Sent: </b>Sunday, April 11, 2021 1:47<br>
            <b>To: </b><a moz-do-not-send="true"
              href="mailto:cuis-dev@lists.cuis.st">Discussion of Cuis
              Smalltalk</a><br>
            <b>Cc: </b><a moz-do-not-send="true"
              href="mailto:mail@jaromir.net">Jaromir Matas</a><br>
            <b>Subject: </b>Re: [Cuis-dev] Unwind mechanism during
            termination is broken and inconsistent<o:p></o:p></p>
        </div>
        <p class="MsoNormal"><o:p> </o:p></p>
        <div>
          <p class="MsoNormal">Hi Jaromir,<o:p></o:p></p>
          <div>
            <p class="MsoNormal"> thank you for sharing this with us! It
              looks very interesting.<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"> As you can imagine a change of this
              magnitude and impact has to be analyzed in detail and
              tested rigorously, and that will take time. (Sadly Juan
              and me are really busy at this time so it will even take
              more time :-) )<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"> It would help us deeply if there are
              tests that reproduce the errors, do you have them? If not,
              could you write them? I know it is a difficult problem to
              test but if we could have automated tests for this it
              would help a lot. <o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"> Also, it would help to know how you
              tested it. For example, have you tried in stress
              conditions? for example with an app that uses many
              processes (ie. seaside or any web framework). Please, do
              not take this question as disrespectful, but again, it is
              a change with a big impact and we need to be sure it will
              keep the current behavior (but the bugs of course) and it
              will not introduce new bugs.<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"> I'm also wondering if there could be
              systems that are implemented as these bugs you mention
              were "features" ...<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
          <div>
            <p class="MsoNormal"> Thanks!<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"> Hernan.<o:p></o:p></p>
          </div>
          <div>
            <p class="MsoNormal"><o:p> </o:p></p>
          </div>
        </div>
        <p class="MsoNormal"><o:p> </o:p></p>
        <div>
          <div>
            <p class="MsoNormal">On Sat, Apr 10, 2021 at 4:20 PM Jaromir
              Matas via Cuis-dev <<a moz-do-not-send="true"
                href="mailto:cuis-dev@lists.cuis.st">cuis-dev@lists.cuis.st</a>>
              wrote:<o:p></o:p></p>
          </div>
          <blockquote style="border-width: medium medium medium 1pt;
            border-style: none none none solid; border-color:
            -moz-use-text-color -moz-use-text-color -moz-use-text-color
            rgb(204, 204, 204); padding: 0in 0in 0in 6pt; margin: 5pt
            0in 5pt 4.8pt;">
            <div>
              <div>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  Hi All,<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  I'd like to present to you a rewrite of #terminate and
                  #isTerminated that fixes a few bugs and
                  inconsistencies in process termination. I hoped it
                  might interest you.<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  I'm a Smalltalk enthusiast with education background
                  in math/CS. I've been experimenting with processes in
                  Squeak lately and discovered a few bugs (or at least
                  inconsistencies) in process termination and would like
                  to offer and discuss a solution for Cuis.<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  The bugs are not unique to Cuis; Squeak/Pharo
                  inherited them too and to a degree even Visual Works
                  and VA are affected. The proposal presented here
                  doesn't copy any VW or VA solution but rather
                  implements a different approach :)<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  Before boring you to death I'll list the bugs:<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  1. #isTerminated falsely reports almost any bottom
                  context as terminated<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  2. an active process termination bug causes an image
                  freeze <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  3. a <i>nested</i> unwind bug: ensure blocks may get
                  skipped during unwind<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  4. a failure to complete <i>nested</i> unwind blocks
                  halfway thru execution <o:p>
                  </o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  5. a failure to correctly execute a non-local return
                  or an error in an unwind block
                  <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  6. inconsistent semantics of protected blocks unwind
                  during active vs. suspended process termination<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  The current implementation of #terminate uses three
                  different approaches to terminate a process:<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  - the active process is terminated via a 'standard'
                  unwind algorithm used in context #unwindTo: or
                  #resume:,<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  - a suspended process termination attempts completing
                  unwind blocks halfway through their execution first
                  using #runUntilErrorOrReturnFrom:<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  - and after that the termination continues unwinding
                  the remaining unwind blocks using the simulation
                  algorithm of #popTo:<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  This approach <i>looks</i> inconsistent and indeed
                  leads to inconsistencies, undesirable behavior and an
                  instability mentioned above.<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  The Idea: In my view the easiest and most consistent
                  solution is to simply extend the existing mechanism
                  for completing halfway-through unwind blocks and let
                  it deal with
                  <b>all</b> unwind blocks. To make this approach
                  applicable to terminating the active process, we
                  suspend it first and then terminate it as a suspended
                  process.<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  A commented code is enclosed. <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  I know it's pretty difficult to get a feedback on an
                  ancient code; I'll be all the more grateful for your
                  inputs.<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  Best regards,<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  Jaromir<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  PS:<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  Note the change in newProcess - `Processor
                  activeProcess terminate` is replaced by `Processor
                  activeProcess suspend` because there's no need for
                  `terminate` at the bottom context ("terminate = unwind
                  + suspend") and because it would lead to an infinite
                  loop combined with my proposed changes to #terminate.<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  PPS:<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  More on the bugs:<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  ad 1) The #isTerminated condition `suspendedContext pc
                  > suspendedContext startpc` is always met after
                  executing the first instruction of the bottom context
                  – generally not a sign of a terminated process.<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  ad 2) Explained in [1]. Concerns e.g. examples like <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                                [ [ Processor activeProcess terminate ]
                  ensure: [ Processor activeProcess terminate ] ] fork.
                  <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  ad 3-4) Explained in detail in [2].<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  One example to illustrate the bug:<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  | p |<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  p := [<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                                [<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                                             [ ] ensure: [<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                                                           [ ] ensure: [<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                                                                        
                  Processor activeProcess suspend.
                  <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                                                                        
                  Transcript show: 'x1']. <o:p>
                  </o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                                                           Transcript
                  show: 'x2']<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                                ] ensure: [<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                                             Transcript show: 'x3']<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  ] newProcess.<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  p resume.<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  Processor yield.<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  p terminate<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  ===> x1<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  The unwind procedure prints just x1 and skips not only
                  x2 but x3 as well ! You'd like to see them all.<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  ad 5) This happens in cases like (better save your
                  image before trying this):<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                                [self error: 'e1'] ensure: [^2]      
                   "discovered by Christoph Thiede"<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  and<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                                [self error: 'e1'] ensure: [self error:
                  'e2']<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  These are generally the types of situations causing
                  the Unwind errors. The root cause is that the
                  unwinding is done via simulation (#popTo) rather than
                  'directly'; the problem is during the simulated
                  execution of unwind blocks a non-local return forwards
                  the execution into a wrong stack - resulting in the
                  Unwind errors. <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  ad 6) I just prefer a unified approach... unless I
                  somehow overlooked a reason for two different
                  approaches (I hope not).<o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  [1] <a moz-do-not-send="true"
href="http://forum.world.st/A-bug-in-active-process-termination-crashing-image-td5128186.html"
                    target="_blank">
http://forum.world.st/A-bug-in-active-process-termination-crashing-image-td5128186.html</a><o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                  [2] <a moz-do-not-send="true"
href="http://forum.world.st/Another-bug-in-Process-gt-gt-terminate-in-unwinding-contexts-td5128171.html#a5128178"
                    target="_blank">
http://forum.world.st/Another-bug-in-Process-gt-gt-terminate-in-unwinding-contexts-td5128171.html#a5128178</a><o:p></o:p></p>
                <p class="MsoNormal" style="margin-left: 4.8pt;">
                   <o:p></o:p></p>
              </div>
            </div>
            <p class="MsoNormal" style="margin-left: 4.8pt;">-- <br>
              Cuis-dev mailing list<br>
              <a moz-do-not-send="true"
                href="mailto:Cuis-dev@lists.cuis.st" target="_blank">Cuis-dev@lists.cuis.st</a><br>
              <a moz-do-not-send="true"
                href="https://lists.cuis.st/mailman/listinfo/cuis-dev"
                target="_blank">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><o:p></o:p></p>
          </blockquote>
        </div>
        <p class="MsoNormal"><br clear="all">
          <o:p></o:p></p>
        <div>
          <p class="MsoNormal"><o:p> </o:p></p>
        </div>
        <p class="MsoNormal">-- <o:p></o:p></p>
        <div>
          <div>
            <div>
              <div>
                <div>
                  <div>
                    <div>
                      <div>
                        <div>
                          <div>
                            <p class="MsoNormal"><a
                                moz-do-not-send="true"
                                href="https://10pines.com/"
                                target="_blank"><span style="font-size:
                                  13.5pt; font-family:
                                  "Helvetica",sans-serif;
                                  text-decoration: none;"><img
                                    moz-do-not-send="true" style="width:
                                    1.125in; height: 0.35in;"
                                    id="_x0000_i1025"
                                    src="https://10pines.github.io/email-signature/10pines-firma@2x.png"
                                    border="0" height="34" width="108"></span></a><o:p></o:p></p>
                            <h1 style="margin: 0in;"><span
                                style="font-size: 10.5pt;">Hernán
                                Wilkinson<o:p></o:p></span></h1>
                            <h2 style="margin-right: 0in; margin-bottom:
                              12pt; margin-left: 0in;">
                              <span style="font-size: 10.5pt; color:
                                rgb(100, 100, 100);">Software Developer,
                                Teacher & Coach<o:p></o:p></span></h2>
                            <p style="margin: 0in;"><span
                                style="font-size: 9pt; color: rgb(100,
                                100, 100);">Alem 896, Floor 6, Buenos
                                Aires, Argentina<o:p></o:p></span></p>
                            <p style="margin: 0in;"><span
                                style="font-size: 9pt; color: rgb(100,
                                100, 100);">+54 11 6091 3125<o:p></o:p></span></p>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <p style="margin: 0in;"><span style="font-size: 9pt; color:
            rgb(100, 100, 100);">@HernanWilkinson<o:p></o:p></span></p>
        <p class="MsoNormal"><o:p> </o:p></p>
      </div>
    </blockquote>
  </body>
</html>