code: @Override
      public void close()
                      throws SIResourceException, SIConnectionLostException,
                      SIErrorException
      {
          if (TraceComponent.isAnyTracingEnabled() && CoreSPIConsumerSession.tc.isEntryEnabled())
              SibTr.entry(CoreSPIConsumerSession.tc, "close", this);
  
          //perform the actual closing operations
          _close();
  
          //remove ourselves from the connection
          _connection.removeConsumerSession(this);
  
          if (_bifurcatedConsumers != null)
          {
              // Close any associated Bifurcated Consumers.
              // We take a copy of the list of bifucated consumers, as the close
              // method of each will remove itself from the list (so an iterator
              // would see concurrent modifications).
              // We let the bifurcated consumer do the work, as they need to
              // unlock the associated messages (and the code is re-used from
              // ConnectionImpl.close() which also calls into the BCS directly).
              BifurcatedConsumerSessionImpl[] bifurcatedConsumersCopy;
              synchronized (_bifurcatedConsumers)
              {
                  bifurcatedConsumersCopy = new BifurcatedConsumerSessionImpl[_bifurcatedConsumers.size()];
                  bifurcatedConsumersCopy = _bifurcatedConsumers.toArray(bifurcatedConsumersCopy);
              }
              for (int i = 0; i < bifurcatedConsumersCopy.length; i++) {
                  bifurcatedConsumersCopy[i]._close();
              }
              _bifurcatedConsumers = null;
          }
  
          if (TraceComponent.isAnyTracingEnabled() && CoreSPIConsumerSession.tc.isEntryEnabled())
              SibTr.exit(CoreSPIConsumerSession.tc, "close");
      }
docs: /*
  (non-Javadoc)
  
  @see com.ibm.wsspi.sib.core.ConsumerSession#close()