[Mono-dev] [PATCH] TcpChannel hang on Windows.
Kornél Pál
kornelpal at gmail.com
Fri Dec 19 18:13:48 EST 2008
Hi,
My conclusion is that there is no magic. The background thread is simply
killed.
"finally" is never printed altough it is in a constrained execution region.
If you uncomment QueueUserAPC the wrapper will abort the thread and
"finally" gets printed. But that is just a play with QueueUserAPC to
study the runtime and Accept, not really necessary.
Kornél
Kornél Pál wrote:
> Hi,
>
> If you need a quick fix you patch will do it. But it is just a workaround.
>
> What I suggested is that the bug is general, not related to Socket.Accept.
>
> You wrote in your original message:
>
> The problem is that the APC call does not cause the accept call to break.
>
> My test case shows that the APC is executed even if accept is not leaved.
>
> I don't know the exact solution because I don't know what the real bug is.
>
> I just wanted to show you that Mono behaves the same as MS.NET except
> that the thread is not terminated at exit so I believe this is the
> difference rather than any hack in Socket.Accept.
>
> The difference in thread state is a bug I believe that may cause other
> bugs if code checks for exact state value but I don't know if this is
> the case.
>
> The fact that I used a managed APC is not required I just have written
> the test case in C#. I believe that in this case the thread is aborted
> because the wrapper checks for abortion.
>
> Kornél
>
> Bill Holmes wrote:
>> Kornél,
>>
>> After reading your mail a bunch more times and messing with the sample
>> I think I finally get what you were saying.
>>
>> What I discovered was that the APC callback being a managed method
>> gives mono a chance to check the thread state when crossing to and
>> from the managed thread boundary. It is not the fact that you called
>> an APC that was important. What is important is that the APC was a
>> managed call.
>>
>> This does in fact give me some ideas on new things to try. I will let
>> you know what I find. I suspect that my new conclusion will be a
>> risky change that will require much testing.
>>
>> -bill
>>
>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: BlockingAccept.cs
Url: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20081220/5bf7958d/attachment-0001.pl
More information about the Mono-devel-list
mailing list