Esempio n. 1
0
        private static bool WaitOneRaw(Original::Mutex mutex, int timeOut, bool domain)
        {
            if (mutex == null)
            {
                throw new ArgumentNullException();
            }
            if (timeOut < 0 && timeOut != Timeout.Infinite)
            {
                throw new ArgumentOutOfRangeException();
            }

            return(Helper.SimpleWrap <bool>(
                       delegate(ClrSyncManager manager)
            {
                if (timeOut == Timeout.Infinite)
                {
                    return WaitOneHelper.WaitOneDelegate(manager, mutex);
                }
                else
                {
                    return WaitOneHelper.WaitOneDelegateWithTimeout(manager, mutex);
                }
            },
                       delegate()
            {
                return mutex.WaitOne(timeOut, domain);
            }));
        }
Esempio n. 2
0
 public static void ReleaseMutex(Original::Mutex mutex)
 {
     if (mutex == null)
     {
         throw new ArgumentNullException();
     }
     Helper.SimpleWrap <bool>(
         delegate(ClrSyncManager manager)
     {
         manager.SetMethodInfo("Mutex.ReleaseMutex");
         manager.SyncVarAccess(mutex, MSyncVarOp.LOCK_RELEASE);
         try
         {
             mutex.ReleaseMutex();
         }
         catch (Exception e)
         {
             manager.CommitSyncVarAccess();
             throw e;
         };
         manager.CommitSyncVarAccess();
         return(true);
     },
         delegate()
     {
         mutex.ReleaseMutex();
         return(true);
     });
 }
Esempio n. 3
0
 public static bool WaitOne(Original::Mutex mutex, TimeSpan timeOut, bool exitContext)
 {
     return(WaitOneRaw(mutex, (int)timeOut.TotalMilliseconds, exitContext));
 }
Esempio n. 4
0
 public static bool WaitOne(Original::Mutex mutex, int timeOut, bool exitContext)
 {
     return(WaitOneRaw(mutex, timeOut, exitContext));
 }
Esempio n. 5
0
 public static bool WaitOne(Original::Mutex mutex)
 {
     return(WaitOneRaw(mutex, Timeout.Infinite, false));
 }