I found problem in Mono in named mutex I have repro program:
using System;
using System.Threading;

namespace Crasher
{
        internal class Program
        {
                public static void Main (string[] args)
                {
                        var a = "";
                        for (var i = 0; i < 100; i++)
                        {                               
                                new Thread(Crasher).Start();
                        }
                        Console.WriteLine(a);
                        Console.ReadLine();
                }

                private static void Crasher(){
                        var rnd = new Random();
                        while (true)
                        {
                                Thread.Sleep(rnd.Next(100, 10000));
                                using (var mutex = new Mutex(false, 
"Global\\TEST"))
                                {
                                        var owner = false;
                                        try
                                        {
                                                owner = 
mutex.WaitOne(TimeSpan.FromMinutes(1));
                                        }
                                        finally
                                        {
                                                if (owner)
                                                {
                                                        mutex.ReleaseMutex();
                                                }
                                        }
                                        Console.WriteLine ("PING");
                                }
                                Thread.Sleep(rnd.Next(100, 10000));
                        }
                }
        }
}

It program crached mono after few seconds.
I see namedmutex_create and namedmutex_release use different locks.
First time I found it problem when run Nuget client on mono.
I verify repro on mono 4.2, 4.4, and master.
Anybody can help me resolve this issue?
On 4.4.0 native crash:
namedmutex_create: error creating mutex handle
PING
PING
PING
PING
PING
PING
PING
PING
PING
PING
PING
PING
PING
PING
_wapi_handle_unref_full: Attempting to unref unused handle 0x4e0
PING
PING
namedmutex_create: error creating mutex handle
PING
PING
PING
PING
PING
PING
_wapi_handle_ref: Attempting to ref unused handle 0x4e3
* Assertion at ../../mono/utils/mono-os-mutex.h:135, condition `res != EINVAL' 
not met

Stacktrace:

  at <unknown> <0xffffffff>
  at (wrapper managed-to-native) System.Threading.WaitHandle.WaitOne_internal 
(System.Threading.WaitHandle,intptr,int,bool) <0x00073>
  at System.Threading.WaitHandle.WaitOne (System.TimeSpan,bool) <0x0009b>
  at System.Threading.WaitHandle.WaitOne (System.TimeSpan) <0x0001d>
  at Crasher.Program.Crasher () <0x000f0>
  at System.Threading.ThreadHelper.ThreadStart_Context (object) <0x0009a>
  at System.Threading.ExecutionContext.RunInternal 
(System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool)
 <0x001c6>
  at System.Threading.ExecutionContext.Run 
(System.Threading.ExecutionContext,System.Threading.ContextCallback,object,bool)
 <0x00020>
  at System.Threading.ExecutionContext.Run 
(System.Threading.ExecutionContext,System.Threading.ContextCallback,object) 
<0x00059>
  at System.Threading.ThreadHelper.ThreadStart () <0x0002e>
  at (wrapper runtime-invoke) object.runtime_invoke_void__this__ 
(object,intptr,intptr,intptr) <0x000e0>

Native stacktrace:

        0   mono                                0x0000000103f9b0ca 
mono_handle_native_sigsegv + 271
        1   libsystem_platform.dylib            0x00007fff854c252a _sigtramp + 
26
        2   mono                                0x00000001042036a4 tmp_dir + 
5316
        3   libsystem_c.dylib                   0x00007fff935536e7 abort + 129
        4   mono                                0x000000010410d1f0 monoeg_g_log 
+ 0
        5   mono                                0x000000010410d175 
monoeg_g_logv + 83
        6   mono                                0x000000010410d31a 
monoeg_assertion_message + 143
        7   mono                                0x00000001040e453d 
_wapi_handle_timedwait_signal_handle + 1153
        8   mono                                0x00000001040f4aec 
wapi_WaitForSingleObjectEx + 606
        9   mono                                0x000000010406c01c 
mono_wait_uninterrupted + 130
        10  mono                                0x000000010406c1ff 
ves_icall_System_Threading_WaitHandle_WaitOne_internal + 73
        11  ???                                 0x0000000108130b54 0x0 + 
4430433108
        12  mscorlib.dll.dylib                  0x00000001062ed7ae 
System_Threading_WaitHandle_WaitOne_System_TimeSpan + 30
        13  mscorlib.dll.dylib                  0x0000000106140e5b 
System_Threading_ThreadHelper_ThreadStart_Context_object + 155
        14  mscorlib.dll.dylib                  0x000000010613f331 
System_Threading_ExecutionContext_Run_System_Threading_ExecutionContext_System_Threading_ContextCallback_object_bool
 + 33
        15  mono                                0x0000000103f04876 
mono_jit_runtime_invoke + 1578
        16  mono                                0x0000000104090c23 
mono_runtime_invoke + 130
        17  mono                                0x0000000104070409 
start_wrapper + 424
        18  mono                                0x0000000104106cb1 
inner_start_thread + 305
        19  libsystem_pthread.dylib             0x00007fff989c399d 
_pthread_body + 131
        20  libsystem_pthread.dylib             0x00007fff989c391a 
_pthread_body + 0
        21  libsystem_pthread.dylib             0x00007fff989c1351 thread_start 
+ 13



On master UnhandlerException:
namedmutex_create: error creating mutex handle
PING
PING
PING
PING
PING
_wapi_handle_unref_full: Attempting to unref unused handle 0x4eb
PING
PING
PING
_wapi_handle_unref_full: Attempting to unref unused handle 0x4ec
PING
PING
PING
PING
PING
PING
PING
PING
_wapi_handle_unref_full: Attempting to unref unused handle 0x4ee
PING
PING
PING
PING
PING
PING
PING
PING
PING
PING
PING
PING
PING
_wapi_handle_unref_full: Attempting to unref unused handle 0x4f1
PING
PING
PING
PING
PING
PING
PING

Unhandled Exception:
System.ApplicationException: Mutex is not owned
  at System.Threading.Mutex.ReleaseMutex () <0x10e769ef0 + 0x00043> in 
<filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.Threading.Mutex:ReleaseMutex ()
  at Crasher.Program.Crasher () <0x10cfdfc80 + 0x00129> in <filename unknown>:0 
  at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) 
<0x10e5fb710 + 0x00096> in <filename unknown>:0 
  at System.Threading.ExecutionContext.RunInternal 
(System.Threading.ExecutionContext executionContext, 
System.Threading.ContextCallback callback, System.Object state, System.Boolean 
preserveSyncCtx) <0x10e5f93b0 + 0x001c6> in <filename unknown>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext 
executionContext, System.Threading.ContextCallback callback, System.Object 
state, System.Boolean preserveSyncCtx) <0x10e5f9380 + 0x00020> in <filename 
unknown>:0 
  at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext 
executionContext, System.Threading.ContextCallback callback, System.Object 
state) <0x10e5f92d0 + 0x00059> in <filename unknown>:0 
  at System.Threading.ThreadHelper.ThreadStart () <0x10e5fb8c0 + 0x0002e> in 
<filename unknown>:0 
_wapi_handle_unref_full: Attempting to unref unused handle 0x4f1
[ERROR] FATAL UNHANDLED EXCEPTION: Nested exception trying to figure out what 
went wrong
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to