docs: public synchronized void unlock() throws SevereMessageStoreException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "unlock", this);
  
          // If the subscription locks are down to zero then notify the threads waiting
          // for the subscriptionTable lock.
          synchronized (iMutex)
          {
              // If we are exclusively locked, then just return, as long as
              // the thread that is calling is the thread that holds the
              // exclusive lock.
              if (iExclusivelyLocked && iExclusiveLockHolder == Thread.currentThread())
              {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "unlock");
                  return;
              }
  
              // Decrement the lock count and notify the other threads if no
              // one holds the lock any more.
              if (--iLockCount == 0)
                  notifyAll();
  
              if (iLockCount < 0)
              {
              	if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) SibTr.event(this, tc, "Unlock caused lock count to drop below zero!");
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "unlock");
                  throw new SevereMessageStoreException("Unlock caused lock count to drop below zero!");
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "unlock");
      }