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;
    }
  }
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.