[Mono-bugs] [Bug 678164] New: Threads started by native code that call into managed code get IsBackground==False

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Wed Mar 9 11:02:30 EST 2011



           Summary: Threads started by native code that call into managed
                    code get IsBackground==False
    Classification: Mono
           Product: Mono: Runtime
           Version: 2.6.x
          Platform: x86
        OS/Version: Ubuntu
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: misc
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: clockworksaint at gmail.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---

Created an attachment (id=418332)
 --> (http://bugzilla.novell.com/attachment.cgi?id=418332)
Archive of source for native shared library and managed assembly that
demonstrate issue

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)
AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.107 Safari/534.13

On Windows using the Microsoft compiler and runtime, if I P/Invoke native code
and pass it a delegate (marshalled to a function pointer) and then the native
code spawns a thread and invokes the callback on the thread, the managed Thread
object created for the thread has IsBackground set to True. Later on, when my
main managed thread finishes, the process exits.

On Linux using Mono, if I do the same thing, the managed Thread object has
IsBackground set to True. If that thread is still running (regardless of
whether it is running managed code) when my main managed thread finishes, the
process does not exit, but continues to wait for that thread.

Reproducible: Always

Steps to Reproduce:
1. Build and run the attached code:

    On Linux with Mono:

    $ gcc -shared -c native_thread.c -o native_thread.so
    $ gmcs ThreadTest.cs
    $ mono ThreadTest.exe

    On Windows with Microsoft:

    > cl native_thread.c /LD
    > csc ThreadTest /platform:x86
    > ThreadTest.exe

2. It prints out the value of Thread.CurrentThread.IsBackground in the managed
callback invoked by the native code on the thread created by the native code.

I believe the native libraries are as equivalent and minimal as possible. The
Windows one uses CreateThread, the Posix one uses pthreads.
Actual Results:  
In Mono, IsBackground is False. On Windows/.NET, IsBackground is True.

Expected Results:  
I expect IsBackground to be True under Mono as well.

This is mostly a problem for our automated tests - when something goes wrong
and a test fails we might not be able to cleanly shut down a native library
that owns threads. When we try to finish some of the threads created by that
library are still running and it appears that Mono hangs waiting for them
because it considers them foreground threads.

Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.

More information about the mono-bugs mailing list