code: public void start(int requestNumber, boolean deliverImmediately, boolean sendReply, SendListener sendListener)
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "start",
                                             new Object[]{requestNumber, deliverImmediately});
  
        logicallyStarted = true;
  
        // If the async reader is currently in the middle of a receiveWithWait() then all we need to
        // do is call start() on the CATConsumer class which will start the session and then send
        // a reply if one is required
        if (asynchReader.isCurrentlyDoingReceiveWithWait())
        {
           super.start(requestNumber, true, sendReply, sendListener);
        }
        // If we do not need to actually start the session then we still need to reply (potentially)
        // so ensure we do this here.
        else
        {
           if (sendReply)
           {
              try
              {
                 getConversation().send(poolManager.allocate(),
                                        JFapChannelConstants.SEG_START_SESS_R,
                                        requestNumber,
                                        JFapChannelConstants.PRIORITY_HIGHEST,
                                        true,
                                        ThrottlingPolicy.BLOCK_THREAD,
                                        sendListener);
              }
              catch (SIException e)
              {
                 FFDCFilter.processException(e,
                                             CLASS_NAME + ".start",
                                             CommsConstants.CATSESSSYNCHCONSUMER_START_01,
                                             this);
  
                 if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, e.getMessage(), e);
  
                 SibTr.error(tc, "COMMUNICATION_ERROR_SICO2013", e);
  
                 sendListener.errorOccurred(null, getConversation());
              }
           }
           else
           {
              sendListener.dataSent(getConversation());
           }
        }
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "start");
     }
docs: Marks this session as started. If we are currently doing a receiveWithWait()
  then actually starts the session for us so that message delivery can
  continue.
  
  @param requestNumber
  @param deliverImmediately The deliver immediately flag is ignored for this type of receive
  @param sendReply
  @param sendListener