docs: public SIBusMessage[] readSet(SIMessageHandle[] msgHandles) 
        throws SISessionUnavailableException, SISessionDroppedException,
               SIConnectionUnavailableException, SIConnectionDroppedException,
               SIResourceException, SIConnectionLostException, 
               SIIncorrectCallException, SIMessageNotLockedException, 
               SIErrorException
     {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "readSet",
                                             new Object[] 
                                             {
                                                msgHandles.length + " msg ids"
                                             });
  
        SIBusMessage[] messages = null;
        
        try
        {
           closeLock.readLock().lockInterruptibly();
  
           try
           {         
              checkAlreadyClosed();
              
              CommsByteBuffer request = getCommsByteBuffer();
              
              request.putShort(getConnectionObjectID());
              request.putShort(getProxyID());
              request.putSIMessageHandles(msgHandles);
              
              CommsByteBuffer reply = jfapExchange(request, 
                                                   JFapChannelConstants.SEG_READ_SET,
                                                   JFapChannelConstants.PRIORITY_MEDIUM,
                                                   true);
           
              try
              {
                 short err = reply.getCommandCompletionCode(JFapChannelConstants.SEG_READ_SET_R);
                 if (err != CommsConstants.SI_NO_EXCEPTION)
                 {
                    checkFor_SISessionUnavailableException(reply, err);
                    checkFor_SISessionDroppedException(reply, err);
                    checkFor_SIConnectionUnavailableException(reply, err);
                    checkFor_SIConnectionDroppedException(reply, err);
                    checkFor_SIResourceException(reply, err);
                    checkFor_SIConnectionLostException(reply, err);
                    checkFor_SIIncorrectCallException(reply, err);
                    checkFor_SIMessageNotLockedException(reply, err);
                    checkFor_SIErrorException(reply, err);
                    defaultChecker(reply, err);
                 }
                 
                 int numberOfMessages = reply.getInt();
                 messages = new SIBusMessage[numberOfMessages];
                 
                 for (int x = 0; x < numberOfMessages; x++)
                 {
                    messages[x] = reply.getMessage(getCommsConnection());               
                 }
              }
              finally
              {
                 reply.release(false);
              }
           }
           finally
           {
              closeLock.readLock().unlock();
           }
        }
        catch (InterruptedException e)
        {
           // No FFDC Code needed
        }
        
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "readSet");
        return messages;
     }