core/src/main/java/com/orientechnologies/common/concur/lock/ScalableRWLock.java
public void sharedUnlock() {
    final ReadersEntry localEntry = entry.get();
    if (localEntry == null) {
      // ERROR: Tried to unlock a non read-locked lock
      throw new IllegalMonitorStateException();
    } else {
      localEntry.state.set(SRWL_STATE_NOT_READING);
      return;
    }
  }
public void sharedUnlock() {
    final ReadersEntry localEntry = entry.get();
    if (localEntry == null) {
      // ERROR: Tried to unlock a non read-locked lock
      throw new IllegalMonitorStateException();
    } else {
      localEntry.state.set(SRWL_STATE_NOT_READING);
      return;
    }
  }
public void sharedUnlock ( ) { final ReadersEntry localEntry = entry . get ( ) ; if ( localEntry == null ) { // ERROR: Tried to unlock a non read-locked lock throw new IllegalMonitorStateException ( ) ; } else { localEntry . state . set ( SRWL_STATE_NOT_READING ) ; return ; } }
Attempts to release the read lock.
<p>If the current thread is the holder of this lock then
the {@code reentrantReaderCount} is decremented. If the
{@code reentrantReaderCount} is now zero then the lock is released.
If the current thread is not the holder of this lock then {@link
IllegalMonitorStateException} is thrown.

@throws IllegalMonitorStateException if the current thread does not
hold this lock.
Attempts to release the read lock . <p > If the current thread is the holder of this lock then the { @code reentrantReaderCount } is decremented . If the { @code reentrantReaderCount } is now zero then the lock is released . If the current thread is not the holder of this lock then { @link IllegalMonitorStateException } is thrown .