docs: public void unlockCurrent()
        throws SISessionUnavailableException, SISessionDroppedException,
               SIConnectionUnavailableException, SIConnectionDroppedException,
               SIResourceException, SIConnectionLostException, 
               SIIncorrectCallException, SIMessageNotLockedException, 
               SIErrorException
  	{
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc,"unlockCurrent");
        
        synchronized(lmeOperationMonitor)
        {
           checkValid();
     
           // If nextIndex = 0 then we are pointing at the first item, therefore unlocking the current
           // is invalid. Also, if the message is null, then we must have deleted - therefore also
           // invalid.
           if ((nextIndex == 0) || (messages[nextIndex - 1] == null))
           {
              throw new SIIncorrectCallException(
                 nls.getFormattedMessage("LME_UNLOCK_INVALID_MSG_SICO1017", null, null)
              );
           }
           
           JsMessage retMsg = messages[nextIndex - 1];
           
           if (CommsUtils.isRecoverable(retMsg, consumerSession.getUnrecoverableReliability()))
           {
              convHelper.unlockSet(new SIMessageHandle[] {retMsg.getMessageHandle()});
           }
           
           messages[nextIndex - 1] = null;
        }
        
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc,"unlockCurrent");
  	}