<br><br><div class="gmail_quote">On Tue, Mar 9, 2010 at 1:57 PM, Martin Baulig <span dir="ltr">&lt;<a href="mailto:martin@ximian.com" target="_blank">martin@ximian.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div>On 03/08/2010 08:24 PM, Rodrigo Kumpera wrote:<br>
&gt;<br>
&gt; Routing Thread::Abort() around is not the behavior I can observe on<br>
&gt; MS. Do you have<br>
&gt; any test or documentation that shows this behavior? Even if this looks<br>
&gt; like the wrong<br>
&gt; thing, we should follow MS behavior as compatibility is one of our<br>
&gt; major goal.<br>
&gt;<br>
&gt; What we could do, thou, is to have this behavior as something our<br>
&gt; debuggers can use.<br>
<br>
</div>Hi Rodrigo,<br>
<br>
I attached a test case which blocks on MS, but doesn&#39;t in Mono.<br>
<br>
I tried this both with and without the Visual Studio debugger, and the<br>
`a.Abort ()&#39; always<br>
blocks for 10 seconds till the second thread signaled the wait handle.<br>
The main thread&#39;s<br>
call to Test.Foo() then succeeds.<br>
<br>
When run with Mono, the `a.Abort ()&#39; immediately aborts the thread and<br>
the subsequent<br>
`new Test ()&#39;  throws the TypeInitializationException.<br>
<font color="#888888"><br></font></blockquote><div><br><br>Right, mono&#39;s behavior is really different from MS&#39;s.<br>From what I can gather this is what it happens:<br><br>If aborting itself, is the same as doing &quot;throw new ThreadAbortException ()&quot; and it does break protected blocks[1].<br>

If aborting a thread that is executing a protected block, the caller blocks until the aborted finishes it.<br>Those rules apply across appdomains. So if appdomain D0 abort thread T1 which is running a protected block in<br>

another appdomain, it will block.<br><br>I&#39;m working toward fixing this, but it will take a while given how insanely complex this part of the runtime is.<br><br><br><br>[1]Protected blocks are catch, finally, filter, CER or .cctor.<br>
</div></div>