Program: 87786
Project: 87786
Buggy source:
private TransferEnvelopeReceiverList getReceiverList(final JobID jobID,final ChannelID sourceChannelID){
  TransferEnvelopeReceiverList receiverList=this.receiverCache.get(sourceChannelID);
  if (receiverList == null) {
    try {
      while (true) {
        final ConnectionInfoLookupResponse lookupResponse=this.channelLookupService.lookupConnectionInfo(this.localConnectionInfo,jobID,sourceChannelID);
        if (lookupResponse.receiverNotFound()) {
          throw new IOException("String_Node_Str" + sourceChannelID);
        }
        if (lookupResponse.receiverNotReady()) {
          Thread.sleep(500);
          continue;
        }
        if (lookupResponse.receiverReady()) {
          receiverList=new TransferEnvelopeReceiverList(lookupResponse);
          break;
        }
      }
      if (receiverList != null) {
        this.receiverCache.put(sourceChannelID,receiverList);
        if (LOG.isDebugEnabled()) {
          final StringBuilder sb=new StringBuilder();
          sb.append("String_Node_Str" + sourceChannelID + "String_Node_Str"+ this.localConnectionInfo+ "String_Node_Str");
          if (receiverList.hasLocalReceivers()) {
            sb.append("String_Node_Str");
            final Iterator<ChannelID> it=receiverList.getLocalReceivers().iterator();
            while (it.hasNext()) {
              sb.append("String_Node_Str" + it.next() + "String_Node_Str");
            }
          }
          if (receiverList.hasRemoteReceivers()) {
            sb.append("String_Node_Str");
            final Iterator<InetSocketAddress> it=receiverList.getRemoteReceivers().iterator();
            while (it.hasNext()) {
              sb.append("String_Node_Str" + it.next() + "String_Node_Str");
            }
          }
          LOG.debug(sb.toString());
        }
      }
    }
 catch (    InterruptedException ie) {
    }
catch (    IOException ioe) {
    }
  }
  return receiverList;
}

Fixed version (ground truth):
private TransferEnvelopeReceiverList getReceiverList(final JobID jobID,final ChannelID sourceChannelID){
  TransferEnvelopeReceiverList receiverList=this.receiverCache.get(sourceChannelID);
  if (receiverList == null) {
    try {
      while (true) {
        ConnectionInfoLookupResponse lookupResponse;
synchronized (this.channelLookupService) {
          lookupResponse=this.channelLookupService.lookupConnectionInfo(this.localConnectionInfo,jobID,sourceChannelID);
        }
        if (lookupResponse.receiverNotFound()) {
          throw new IOException("String_Node_Str" + sourceChannelID);
        }
        if (lookupResponse.receiverNotReady()) {
          Thread.sleep(500);
          continue;
        }
        if (lookupResponse.receiverReady()) {
          receiverList=new TransferEnvelopeReceiverList(lookupResponse);
          break;
        }
      }
      if (receiverList != null) {
        this.receiverCache.put(sourceChannelID,receiverList);
        if (LOG.isDebugEnabled()) {
          final StringBuilder sb=new StringBuilder();
          sb.append("String_Node_Str" + sourceChannelID + "String_Node_Str"+ this.localConnectionInfo+ "String_Node_Str");
          if (receiverList.hasLocalReceivers()) {
            sb.append("String_Node_Str");
            final Iterator<ChannelID> it=receiverList.getLocalReceivers().iterator();
            while (it.hasNext()) {
              sb.append("String_Node_Str" + it.next() + "String_Node_Str");
            }
          }
          if (receiverList.hasRemoteReceivers()) {
            sb.append("String_Node_Str");
            final Iterator<InetSocketAddress> it=receiverList.getRemoteReceivers().iterator();
            while (it.hasNext()) {
              sb.append("String_Node_Str" + it.next() + "String_Node_Str");
            }
          }
          LOG.debug(sb.toString());
        }
      }
    }
 catch (    InterruptedException ie) {
    }
catch (    IOException ioe) {
    }
  }
  return receiverList;
}