docs: private void _put(QueueData queueData, short msgBatch, boolean putOnEnd)
          {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "_put",
                                             new Object[]
                                             {
                                                queueData,
                                                ""+msgBatch,
                                                ""+putOnEnd
                                             });
        synchronized(this)
        {
           if (msgBatch == currentBatchNumber)
           {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Message is for correct batch");
  
              // Start D214620
              // First do a check to see if we should even bother trying to alter the HIGH_QUEUE_BYTES
              // If the alteration algorithm is switched off, or if we have already reached the max
              // then don't even bother
              if (HIGH_QUEUE_BYTES_THRESHOLD_FACTOR != 0 && HIGH_QUEUE_BYTES != HIGH_QUEUE_BYTES_MAX)
              {
                 // Is this the first message back?
                 if (bytesReceivedSinceLastRequestForMsgs == 0)
                 {
                    // Work out how full the queue is in percent
                    float queueDepthPercent = (float) currentBytesOnQueue / (float) HIGH_QUEUE_BYTES;
                    int readableQueueDepthPercent = (int) queueDepthPercent * 100;
  
                    // If the queue is less full than we wanted it to be, make some adjustments
                    if (queueDepthPercent < HIGH_QUEUE_BYTES_THRESHOLD_FACTOR)
                    {
                       // Did the request come in the last 5 seconds?
                       long currentTime = System.currentTimeMillis();
                       if (currentTime < (lastRequestForMessagesTime + HIGH_QUEUE_BYTES_ALTERATION_TIMEOUT))
                       {
                          // Right to the queue is less than QUEUE_DEPTH_PERCENT_THRESHOLD% full
                          // Work out how many bytes more we needed to make it
                          // QUEUE_DEPTH_PERCENT_THRESHOLD% full and then increase the HIGH_QUEUE_BYTES
                          // by that amount
                          if (NEW_HIGH_QUEUE_BYTES == 0)
                          {
                             NEW_HIGH_QUEUE_BYTES = HIGH_QUEUE_BYTES;
                             NEW_LOW_QUEUE_BYTES = LOW_QUEUE_BYTES;
                          }
  
                          int old_HIGH_QUEUE_BYTES = NEW_HIGH_QUEUE_BYTES;
                          // First work out how bytes we want on the queue to be at the ideal level
                          int bytesPercent = (int) (HIGH_QUEUE_BYTES_THRESHOLD_FACTOR * NEW_HIGH_QUEUE_BYTES);
                          // And now add onto HIGH_QUEUE_BYTES how many bytes we need to make the actual
                          // queue level up to that value
                          NEW_HIGH_QUEUE_BYTES = NEW_HIGH_QUEUE_BYTES + (bytesPercent - (int) currentBytesOnQueue);
                          // Ensure the value is not too high
                          if (NEW_HIGH_QUEUE_BYTES > HIGH_QUEUE_BYTES_MAX)
                          {
                             NEW_HIGH_QUEUE_BYTES = HIGH_QUEUE_BYTES_MAX;
                          }
                          // And calculate the corresponding Low watermark
                          NEW_LOW_QUEUE_BYTES = (int) (NEW_HIGH_QUEUE_BYTES * LOW_QUEUE_FACTOR);
  
                          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "HIGH_QUEUE_BYTES altered as Queue is " +
                                                               readableQueueDepthPercent + "% full (" +
                                                               currentBytesOnQueue + "/" +
                                                               old_HIGH_QUEUE_BYTES + ")");
                       }
                       else
                       {
                          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Messages arrived outside the alteration timeout - no alteration made (Request made at: " + lastRequestForMessagesTime + ", now: " + currentTime);
                       }
                    }
                    else
                    {
                       if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Queue depth is fine - no need to alter (" + readableQueueDepthPercent + "% full)");
                    }
                 }
              }
  
              // Messages are stored in reverse order in the linked list (i.e. the top of the queue
              // is the end of the list. So if we are adding onto the end of the queue, we place
              // it at the start of the list.
              synchronized(queue)
              {
              	if (putOnEnd)
              	{
              		queue.addFirst(queueData);
              	}
              	// Otheriwse add it to the end.
              	else
              	{
              		queue.addLast(queueData);
              	}
              }
  
              // If the data added to the queue was not a chunked message, then we have received an
              // entire message - so update counters etc
              if (!queueData.isChunkedMessage())
              {
                 notifyMessageReceived(queueData);
              }
           }
           else
           {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Message is not being put as the batch number (" +
                                                   msgBatch + ") != current batch number (" + currentBatchNumber + ")");
           }
        }
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "Put complete. Queue is now: " + this);
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "_put");
     }