Пример #1
0
        /// <summary>
        /// Signal <see cref="UserUnregisterWaitHandle"/> if it has not been signaled yet and is a valid handle.
        /// </summary>
        private void SignalUserWaitHandle()
        {
            _callbackLock.VerifyIsLocked();
            SafeWaitHandle handle      = UserUnregisterWaitHandle;
            IntPtr         handleValue = UserUnregisterWaitHandleValue;

            try
            {
                if (handleValue != IntPtr.Zero && handleValue != (IntPtr)(-1))
                {
                    Debug.Assert(handleValue == handle.DangerousGetHandle());
#if PLATFORM_WINDOWS
                    Interop.Kernel32.SetEvent(handle);
#else
                    WaitSubsystem.SetEvent(handleValue);
#endif
                }
            }
            finally
            {
                handle?.DangerousRelease();
                _callbacksComplete?.Set();
                _unregistered = true;
            }
        }
Пример #2
0
 internal static bool Set(SafeWaitHandle waitHandle)
 {
     waitHandle.DangerousAddRef();
     try
     {
         WaitSubsystem.SetEvent(waitHandle.DangerousGetHandle());
         return(true);
     }
     finally
     {
         waitHandle.DangerousRelease();
     }
 }
Пример #3
0
        public bool Set()
        {
            SafeWaitHandle waitHandle = ValidateHandle();

            try
            {
                WaitSubsystem.SetEvent(waitHandle.DangerousGetHandle());
                return(true);
            }
            finally
            {
                waitHandle.DangerousRelease();
            }
        }
Пример #4
0
        private void SignalNoCallbacksRunning()
        {
            SafeWaitHandle waitHandle = _notifyWhenNoCallbacksRunning.SafeWaitHandle;

            waitHandle.DangerousAddRef();
            try
            {
                WaitSubsystem.SetEvent(waitHandle.DangerousGetHandle());
            }
            finally
            {
                waitHandle.DangerousRelease();
            }
        }
Пример #5
0
        private void SignalNoCallbacksRunning()
        {
            object toSignal = _notifyWhenNoCallbacksRunning;

            Debug.Assert(toSignal is WaitHandle || toSignal is Task <bool>);

            if (toSignal is WaitHandle wh)
            {
                SafeWaitHandle waitHandle = wh.SafeWaitHandle;
                waitHandle.DangerousAddRef();
                try
                {
                    WaitSubsystem.SetEvent(waitHandle.DangerousGetHandle());
                }
                finally
                {
                    waitHandle.DangerousRelease();
                }
            }
            else
            {
                ((Task <bool>)toSignal).TrySetResult(true);
            }
        }
Пример #6
0
 private static bool SetCore(IntPtr handle)
 {
     WaitSubsystem.SetEvent(handle);
     return(true);
 }