<html><head></head><body>
<p>Hi Jakob,</p>
<p>I have new ideas, in thinking on this problem, one per point I
made.<br/>
</p>
<div class="moz-cite-prefix">On 6/23/20 8:40 AM, Robert Withers
wrote:<br/>
</div>
<blockquote type="cite" cite="mid:b43f1dc4-2d98-d91d-adde-670436dc9cea@pm.me">
<p>I removed catch-all error handling from the
PriorityVat>>#processSends. I then added to the error
handling in EventualMessageSend>>#value to open a debugger
after smashing the resolver. </p>
<blockquote>
<p>value<br/>
<br/>
| value |<br/>
[value := receiver<br/>
perform: selector <br/>
withArguments: (self collectArguments: arguments)<br/>
inSuperclass: receiver class.<br/>
self resolver notNil <br/>
ifTrue: [ self resolver resolve: value ] ]<br/>
on: Exception<br/>
do: [:ex |<br/>
self resolver notNil <br/>
ifTrue: [self resolver smash: ex].<br/>
<b>Processor activeProcess signalException:
ex</b>].</p>
</blockquote>
<p>I have a couple of issues with this:</p>
<ol>
<li>When I close the debugger, the EventualProcess with the
stack that ended up in this exception is terminated. I would
need this process to restart and continue, after clearing the
stack from this exception. I am unsure how to make that
happen. Any suggestions are MOST WELCOME!<br/>
</li>
</ol>
</blockquote>
<blockquote>
<ol>
<li>I would like to copy the stack to the side and restart the
Vat's eventLoop right away so that it does not deadlock the
event loop process. And so continue processing message sends.</li>
</ol>
</blockquote>
<blockquote type="cite" cite="mid:b43f1dc4-2d98-d91d-adde-670436dc9cea@pm.me">
<ol>
<li> <br/>
</li>
<li>The stack in the Debugger is not opened on the stack frame
that causes the failure. I would like to rewind the stack to
the bolded line, where the exception is produced, in this case
it would be the method: <b>ZeroDivide(Exception)>>signal</b>.
Is this not where the Debugger should be opened? Again, I am
unsure how to do this and all suggestions are MOST WELCOME!</li>
</ol>
<blockquote>
<blockquote>
<p>--- The full stack ---<br/>
EventualProcess(Process)>>signalException:<br/>
[] in EventualMessageSend>>value<br/>
FullBlockClosure(BlockClosure)>>cull:<br/>
[] in Context>>handleSignal:<br/>
FullBlockClosure(BlockClosure)>>ensure:<br/>
Context>>handleSignal:<br/>
<b>ZeroDivide(Exception)>>signal</b><br/>
SmallInteger>>/<br/>
[] in EventualMessageSend>>value<br/>
FullBlockClosure(BlockClosure)>>on:do:<br/>
EventualMessageSend>>value<br/>
PriorityVat>>processSends<br/>
[] in EventualProcess>>setupContext</p>
</blockquote>
</blockquote>
</blockquote>
<blockquote>
<ol>
<li><br/>
</li>
<li>With the stack copied to the side, I want to massage the
stack so the top frame is the Exception's frame where the
Exception gets signaled. Then I would like to remove the
frames below the frame that causes the Exception signal or
perhaps the stack down to the
EventualMessageSend>>#value. This is the stack I
envision opening in a Debugger:</li>
</ol>
<blockquote>
<p><b>ZeroDivide(Exception)>>signal</b><br/>
SmallInteger>>/<br/>
[] in EventualMessageSend>>value<br/>
FullBlockClosure(BlockClosure)>>on:do:<br/>
EventualMessageSend>>value</p>
</blockquote>
</blockquote>
<p>What do you think? How can I do each of these?</p>
<blockquote>
<ol>
<li>Copy stack</li>
<li>Restart eventLoop</li>
<li>Prune stack</li>
<li>Open Debugger<br/>
</li>
</ol>
</blockquote>
<p>K, r<br/>
</p>
</body></html>