[Mono-dev] Mono hangs on shutdown when /dev/ttySx ports were opened.

Leszek Ciesielski skolima at gmail.com
Tue Sep 22 05:35:08 EDT 2009


Hi,

I'll repeat my question if you'll excuse me:

Zoltan (or anyone else knowing how this works) could you please
explain how the mono/mono/support/*.c code should execute native
blocking calls so that the runtime can shutdown correctly? From
reading into threads.c I am now guessing that the runtime does not
signal the native threads in any way, it just waits for a managed
thread switch to inject ThreadAbortException - is this a correct
assumption? If yes, then the blocking native calls should return every
few seconds (or probably even more often) and force the managed thread
switch with Thread.Sleep() so as to give the runtime the opportunity
to terminate them in an orderly manner. I think I can fix the serial.c
code, I just have to understand better how it should behave to avoid
locking.

Regards,

skolima

On Mon, Sep 21, 2009 at 2:03 PM, Zoltan Varga <vargaz at gmail.com> wrote:
> Hi,
>
>   This is very tricky problem. The runtime waits for all application threads
> to finish before exiting in order to have a predictable shutdown and to be
> compatible with ms.net. If we didn't
> wait for them, and started to free up the runtime data structures, then one
> of the running threads could  access the freed data and crash/misbehave. You
> might want to try to
> close the file descriptor the thread is waiting on, that might break the
> wait.
>
>                               Zoltan
>
> On Mon, Sep 21, 2009 at 10:07 AM, Christian Hoff <christian_hoff at gmx.net>
> wrote:
>>
>> Leszek Ciesielski wrote:
>> > I am experiencing Mono hangup when my application should terminate.
>> > The application opens multiple serial ports, but the bug has also
>> > manifested when network sockets were hanging on reads or writes - it
>> > seems to be related to a pending I/O operation, asynchronous
>> > networking helps somewhat. Anyway, the managed code exits, Mono CPU
>> > usage jumps to 100%, /proc/PID/status shows 4 threads and the
>> > application never exits.
>> >
>> Great to see that this issue is being actively worked on! I'm
>> experiencing the same problem with my application which uses serial
>> ports. The workaround I'm using so far is to set the read timeout to
>> something about 500.
>>
>> As you have probably figured out already, the problem seems to be that
>> Mono does not abort calls to native API. SerialPort.ReadByte pinvokes a
>> blocking function in MonoPosixHelper.
>>
>> I'm not sure if native API calls should be aborted by the Mono runtime.
>> Maybe the best solution here is to see how the func is implemented in
>> MonoPosixHelper and see if we possibly avoid the blocking native call.
>>
>>
>> Christian
>> _______________________________________________
>> Mono-devel-list mailing list
>> Mono-devel-list at lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
>


More information about the Mono-devel-list mailing list