docs: public void unlockCurrent(boolean redeliveryCountUnchanged) 
    throws SISessionUnavailableException, SISessionDroppedException,
           SIResourceException, SIConnectionLostException, 
           SIIncorrectCallException,
           SIErrorException, SIMPMessageNotLockedException
    {
      if (TraceComponent.isAnyTracingEnabled() && CoreSPILockedMessageEnumeration.tc.isEntryEnabled())
        SibTr.entry(CoreSPILockedMessageEnumeration.tc, "unlockCurrent", 
          new Object[] { new Integer(hashCode()), this, new Boolean(redeliveryCountUnchanged)});
  
      checkValidState("unlockCurrent");
            
      localConsumerPoint.checkNotClosed();  
      SIMPMessageNotLockedException notLockedException = null;
      
      synchronized(this)
      {  
        //check that there is a valid current message
        checkCurrentMessageAvailable(null);
        
        if(localConsumerPoint.getConsumerManager().getDestination().isOrdered())
        {
          unlockAll();
        }
        else
        {
          if(currentMsg != null)
          {
            // Remember that we've just unlocked this message, they may want to re-lock it
            // later
            currentUnlockedMessage = currentMsg;
    
            // We only actualy need to unlock it if it's actually in the MS
            if(currentMsg.isStored)
            {
              SIMPMessage msg = (SIMPMessage) (currentMsg.message);
              try
              {
                if (msg != null)
                {
                  msg.unlockMsg(msg.getLockID(), null, !redeliveryCountUnchanged);
                }
              }
              catch (NotInMessageStore e)
              {
                // No FFDC code needed
                SibTr.exception(tc, e);
                // See defect 387591
                // We should only get this exception if the message was deleted via
                // the controllable objects i.e. the admin console. If we are here for
                // another reason that we have a real error.
                
                SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                    new Object[] {
                    "com.ibm.ws.sib.processor.impl.JSLockedMessageEnumeration",
                    "1:445:1.8.1.10",
                    e });
                  
                notLockedException =  new SIMPMessageNotLockedException(
                    nls.getFormattedMessage(
                        "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                        new Object[] {
                            "com.ibm.ws.sib.processor.impl.JSLockedMessageEnumeration",
                            "1:453:1.8.1.10",
                            e },
                            null),
                            new SIMessageHandle[] {msg.getMessage().getMessageHandle()});
                notLockedException.initCause(e.getCause());
              }
              catch (MessageStoreException e)
              {
                // MessageStoreException shouldn't occur so FFDC.
                FFDCFilter.processException(
                  e,
                  "com.ibm.ws.sib.processor.impl.JSLockedMessageEnumeration.unlockCurrent",
                  "1:465:1.8.1.10",
                  this);
            
                SibTr.exception(tc, e);
                SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                  new Object[] {
                    "com.ibm.ws.sib.processor.impl.JSLockedMessageEnumeration",
                    "1:472:1.8.1.10",
                    e });
            
                if (TraceComponent.isAnyTracingEnabled() && CoreSPILockedMessageEnumeration.tc.isEntryEnabled())
                  SibTr.exit(CoreSPILockedMessageEnumeration.tc, "unlockCurrent", e);
    
                throw new SIResourceException(
                  nls.getFormattedMessage(
                    "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                    new Object[] {
                      "com.ibm.ws.sib.processor.impl.JSLockedMessageEnumeration",
                      "1:483:1.8.1.10",
                      e },
                    null),
                  e);
              }
            }
          }
        } // synchronized
    
            
        // Decrement the number of active messages for this consumer (outside the LME lock)
        localConsumerPoint.removeActiveMessages(1);
        
        if (notLockedException != null)
        {
          if (TraceComponent.isAnyTracingEnabled() && CoreSPILockedMessageEnumeration.tc.isEntryEnabled())
            SibTr.exit(CoreSPILockedMessageEnumeration.tc, "unlockCurrent", this);
          
          throw notLockedException;
        }
      }
      if (TraceComponent.isAnyTracingEnabled() && CoreSPILockedMessageEnumeration.tc.isEntryEnabled())
        SibTr.exit(CoreSPILockedMessageEnumeration.tc, "unlockCurrent", this);
    }