[Mono-dev] Race condition in named mutex

Miguel de Icaza miguel at xamarin.com
Thu Jun 16 18:57:31 UTC 2016


Hello Mikhail,

Please file a bug report so we can properly track this issue.

http://bugzilla.xamarin.com

Miguel

On Thu, Jun 16, 2016 at 5:04 AM, Mikhail Filippov <mikhail at filippov.me>
wrote:

> 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 at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-devel-list/attachments/20160616/7feb1c8c/attachment-0001.html>


More information about the Mono-devel-list mailing list