<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small">Hi Jaromir,<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Dec 27, 2021 at 2:52 AM <<a href="mailto:mail@jaromir.net">mail@jaromir.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi all,<br>
<br>
What is the desirable semantics of resuming a previously suspended process?<br></blockquote><div><br></div><div class="gmail_default" style="font-size:small">That a process continue exactly as it had if it had not been suspended in the first place.  In this regard our suspend is hopelessly broken for processes that are waiting on condition variables. See below.</div><div class="gmail_default" style="font-size:small"> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
#resume's comment says: "Allow the process that the receiver represents to continue. Put the receiver in *line to become the activeProcess*."<br>
<br>
The side-effect of this is that a terminating process can get resumed (unless suspendedContext is set to nil - see test KernelTests-jar.417 / Inbox - which has the unfortunate side-effect of #isTerminated answer true during termination).<br></blockquote><div><br></div><div class="gmail_default" style="font-size:small">But a process that is terminating should not be resumable.  This should be a non-issue.  If a process is terminating itself then it is the active process, it has nil as its suspendedContext, and Processor activeProcess resume always produces an error.. Any process that is not terminating itself can be made to fail by having the machinery set the suspendedContext to nil.</div><div class="gmail_default" style="font-size:small"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
A similar side-effect: a process originally waiting on a semaphore and then suspended can be resumed into the runnable state and get scheduled, effectively escaping the semaphore wait.<br></blockquote><div><br></div><div class="gmail_default" style="font-size:small">Right,  This is the bug.  So for example</div><div class="gmail_default" style="font-size:small"><font color="#000000">    </font><font color="#808080">|</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">|</font></div><font color="#000000">    </font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000000">Semaphore</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">new</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#008000">[</font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">wait</font><font color="#008000">]</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">newProcess</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">resume</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#000000">Processor</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">yield</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#000000">{</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">suspend</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000000">}</font></div><div class="gmail_quote"><font color="#000000"><span style="caret-color: rgb(0, 0, 0);"><br></span></font></div><div class="gmail_quote"><font color="#000000"><span style="caret-color: rgb(0, 0, 0);"><span class="gmail_default" style="font-size:small">answers an Array of process p that is past the wait, and the semaphore, s.  And</span></span></font></div><div class="gmail_quote"><font color="#000000"><span style="caret-color: rgb(0, 0, 0);"><br></span></font></div><div class="gmail_quote"><font color="#000000">    </font><font color="#808080">|</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">|</font><font color="#000000"><br>    </font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000000">Semaphore</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">new</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#008000">[</font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">wait</font><font color="#008000">]</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">newProcess</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">resume</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#000000">Processor</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">yield</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">suspend</font><font color="#000000">;</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">resume</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#000000">Processor</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">yield</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">isTerminated</font></div><br>answers true, whereas in both cases the process should<span class="gmail_default" style="font-size:small"> remain waiting on the semaphore.</span><div><span class="gmail_default" style="font-size:small"></span> <div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
Is this an expected behavior or a bug?<br></blockquote><div><br></div><div class="gmail_default" style="font-size:small">IMO it is a dreadful bug.</div><div class="gmail_default" style="font-size:small"></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">If a bug, should a suspended process somehow remember its previous state and/or queue and return to the same one if resumed?<br></blockquote><div><br></div><div class="gmail_default" style="font-size:small">IMO the primitive should back up the process to the wait/primitiveEnterCriticalSection. This is trivial to implement in the image, but is potentially non-atomic.  It is perhaps tricky to implement in the VM, but will be atomic.</div><div class="gmail_default" style="font-size:small"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Sorry if I'm missing something :)<br></blockquote><div><br></div><div class="gmail_default" style="font-size:small">You're not missing anything :-)  Here's another example that answers two processes which should both block but if resumed both make progress.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><font color="#000000">    </font><font color="#808080">|</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p1</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p2</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">m</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">|</font><font color="#000000"><br>    </font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000000">Semaphore</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">new</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">m</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000000">Mutex</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">new</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p1</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#008000">[</font><font color="#808080">m</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">critical:</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#800080">[</font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">wait</font><font color="#800080">]</font><font color="#008000">]</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">newProcess</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p1</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">resume</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p2</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#008000">[</font><font color="#808080">m</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">critical:</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#800080">[</font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">wait</font><font color="#800080">]</font><font color="#008000">]</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">newProcess</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p2</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">resume</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#000000">Processor</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">yield</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#000000">{</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p1</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p1</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">suspend</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p2</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p2</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">suspend</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000000">}</font><br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">p1 enters the mutex's critical section, becoming the mutex's owner. p2 then blocks attempting to enter m's critical section.  Let's resume these two, and examine the semaphore and mutex:</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><font color="#000000">    </font><font color="#808080">|</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p1</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p2</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">m</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">|</font><font color="#000000"><br>    </font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000000">Semaphore</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">new</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">m</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000000">Mutex</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">new</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p1</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#008000">[</font><font color="#808080">m</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">critical:</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#800080">[</font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">wait</font><font color="#800080">]</font><font color="#008000">]</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">newProcess</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p1</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">resume</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p2</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><b style="color:rgb(0,0,0)">:=</b><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#008000">[</font><font color="#808080">m</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">critical:</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#800080">[</font><font color="#808080">s</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">wait</font><font color="#800080">]</font><font color="#008000">]</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">newProcess</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p2</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">resume</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#000000">Processor</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">yield</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#000000">{</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p1</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p1</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">suspend</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p2</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p2</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">suspend</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000000">}</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#808080">p1</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">resume</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p2</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">resume</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#000000">Processor</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">yield</font><font color="#000000">.</font><font color="#000000"><br>    </font><font color="#000000">{</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">s</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">m</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p1</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p1</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">isTerminated</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p2</font><font color="#000000">.</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#808080">p2</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000080">isTerminated</font><font color="#000000"><span class="gmail-Apple-converted-space"> </span></font><font color="#000000">}</font><br></div><br><div class="gmail_default" style="font-size:small">In this case the end result for p2 is accidentally correct. It ends up waiting on s within m's critical section. But p1 ends up terminated.  IMO the correct result is that p1 remains waiting on s, and is still the owner of m, and p2 remains blocked trying to take ownership of m.</div><br> <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Best,<br>
~~~<br>
^[^    Jaromir<br>
<br>
Sent from Squeak Inbox Talk<br>
</blockquote></div><div><br></div><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div></div></div>