/// <summary> /// Handler executed before execution of the method to which the current custom attribute is applied. /// </summary> /// <param name="eventArgs"></param> public override void OnEntry( MethodExecutionArgs eventArgs ) { ReaderWriterLockSlim @lock = ((IReaderWriterSynchronized)eventArgs.Instance).Lock; if ( this.UseDeadlockDetection ) { MethodInterceptionArgs args = new MethodInterceptionArgsImpl( @lock, Arguments.Empty ) { TypedBinding = WriterReadLockBinding.Instance }; if ( [email protected] ) { eventArgs.MethodExecutionTag = new ExitReaderLockLockCookie(); DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnUpgradeableReadEnter( args ); } DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnWriterLockEnter( args ); } else { if ( [email protected] ) { eventArgs.MethodExecutionTag = new ExitReaderLockLockCookie(); @lock.EnterUpgradeableReadLock(); } @lock.EnterWriteLock(); } }
public void Process() { MethodInterceptionArgsImpl interceptionArgsImpl = new MethodInterceptionArgsImpl((object) this, Arguments.Empty); interceptionArgsImpl.Method = InjectedAspectTests.FakeService.\u003C\u003Ez__Aspects.m1; interceptionArgsImpl.TypedBinding = (MethodBinding) InjectedAspectTests.FakeService.\u003CProcess\u003Ec__Binding.singleton; InjectedAspectTests.FakeService.\u003C\u003Ez__Aspects.a0.OnInvoke((MethodInterceptionArgs) interceptionArgsImpl); }
/// <summary> /// Handler executed before execution of the method to which the current custom attribute is applied. /// </summary> /// <param name="eventArgs"></param> public override void OnEntry(MethodExecutionArgs eventArgs) { // Recursion support added. When UpgradeableRead or Write method called from Read method exception is thrown. ReaderWriterLockSlim @lock = ((IReaderWriterSynchronized)eventArgs.Instance).Lock; if (@lock.IsWriteLockHeld) { return; } if (this.UseDeadlockDetection) { MethodInterceptionArgs args = new MethodInterceptionArgsImpl(@lock, Arguments.Empty) { TypedBinding = EnterReadLockBinding.Instance }; DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnReaderLockEnter(args); } else { @lock.EnterReadLock(); } }
/// <summary> /// Handler executed before execution of the method to which the current custom attribute is applied. /// </summary> /// <param name="eventArgs"></param> public override void OnEntry(MethodExecutionArgs eventArgs) { ReaderWriterLockSlim @lock = ((IReaderWriterSynchronized)eventArgs.Instance).Lock; if (this.UseDeadlockDetection) { MethodInterceptionArgs args = new MethodInterceptionArgsImpl(@lock, Arguments.Empty) { TypedBinding = WriterReadLockBinding.Instance }; if ([email protected]) { eventArgs.MethodExecutionTag = new ExitReaderLockLockCookie(); DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnUpgradeableReadEnter(args); } DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnWriterLockEnter(args); } else { if ([email protected]) { eventArgs.MethodExecutionTag = new ExitReaderLockLockCookie(); @lock.EnterUpgradeableReadLock(); } @lock.EnterWriteLock(); } }
private void Exit(bool reEnterWriteLock, ReaderWriterLockSlim @lock) { if (reEnterWriteLock) { if (this.UseDeadlockDetection) { MethodInterceptionArgs args = new MethodInterceptionArgsImpl(@lock, Arguments.Empty) { TypedBinding = WriterReadLockBinding.Instance }; DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnWriterLockEnter(args); } else { @lock.EnterWriteLock(); } } else { if (this.UseDeadlockDetection) { MethodExecutionArgs args = new MethodExecutionArgs(@lock, Arguments.Empty); DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnReaderLockExit(args); } @lock.ExitReadLock(); } }
/// <summary> /// Handler executed before execution of the method to which the current custom attribute is applied. /// </summary> /// <param name="eventArgs"></param> public override void OnEntry( MethodExecutionArgs eventArgs ) { // Recursion support added. When UpgradeableRead or Write method called from Read method exception is thrown. ReaderWriterLockSlim @lock = ((IReaderWriterSynchronized)eventArgs.Instance).Lock; if ( @lock.IsWriteLockHeld ) { return; } if ( this.UseDeadlockDetection ) { MethodInterceptionArgs args = new MethodInterceptionArgsImpl( @lock, Arguments.Empty ) { TypedBinding = EnterReadLockBinding.Instance }; DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnReaderLockEnter( args ); } else { @lock.EnterReadLock(); } }
private void Exit( bool reEnterWriteLock, ReaderWriterLockSlim @lock ) { if ( reEnterWriteLock ) { if ( this.UseDeadlockDetection ) { MethodInterceptionArgs args = new MethodInterceptionArgsImpl( @lock, Arguments.Empty ) { TypedBinding = WriterReadLockBinding.Instance }; DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnWriterLockEnter( args ); } else { @lock.EnterWriteLock(); } } else { if ( this.UseDeadlockDetection ) { MethodExecutionArgs args = new MethodExecutionArgs( @lock, Arguments.Empty ); DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnReaderLockExit( args ); } @lock.ExitReadLock(); } }