Program: 103535
Project: 103535
Buggy source:
/** 
 * Adds a new input <tt>DataSource</tt> to the collection of input <tt>DataSource</tt>s from which this instance reads audio. If the specified <tt>DataSource</tt> indeed provides audio, the respective contributions to the mix will be excluded from the mix output provided through a specific <tt>AudioMixingPushBufferDataSource</tt>.
 * @param inputDataSource a new <tt>DataSource</tt> to input audio to thisinstance
 * @param outputDataSource the <tt>AudioMixingPushBufferDataSource</tt> tonot include the audio contributions of <tt>inputDataSource</tt> in the mix it outputs
 */
void addInputDataSource(DataSource inputDataSource,AudioMixingPushBufferDataSource outputDataSource){
  if (inputDataSource == null)   throw new IllegalArgumentException("String_Node_Str");
synchronized (inputDataSources) {
    for (    InputDataSourceDesc inputDataSourceDesc : inputDataSources)     if (inputDataSource.equals(inputDataSourceDesc.inputDataSource))     throw new IllegalArgumentException("String_Node_Str");
    InputDataSourceDesc inputDataSourceDesc=new InputDataSourceDesc(inputDataSource,outputDataSource);
    boolean added=inputDataSources.add(inputDataSourceDesc);
    if (added) {
      if (logger.isTraceEnabled())       logger.trace("String_Node_Str" + inputDataSource.hashCode());
      if (connected > 0)       try {
        inputDataSourceDesc.connect(this);
      }
 catch (      IOException ioex) {
        throw new UndeclaredThrowableException(ioex);
      }
      if (outputStream != null)       getOutputStream();
      if (started > 0)       try {
        inputDataSourceDesc.start();
      }
 catch (      IOException ioe) {
        throw new UndeclaredThrowableException(ioe);
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * Adds a new input <tt>DataSource</tt> to the collection of input <tt>DataSource</tt>s from which this instance reads audio. If the specified <tt>DataSource</tt> indeed provides audio, the respective contributions to the mix will be excluded from the mix output provided through a specific <tt>AudioMixingPushBufferDataSource</tt>.
 * @param inputDataSource a new <tt>DataSource</tt> to input audio to thisinstance
 * @param outputDataSource the <tt>AudioMixingPushBufferDataSource</tt> tonot include the audio contributions of <tt>inputDataSource</tt> in the mix it outputs
 */
void addInputDataSource(DataSource inputDataSource,AudioMixingPushBufferDataSource outputDataSource){
  if (inputDataSource == null)   throw new IllegalArgumentException("String_Node_Str");
synchronized (inputDataSources) {
    for (    InputDataSourceDesc inputDataSourceDesc : inputDataSources)     if (inputDataSource.equals(inputDataSourceDesc.inputDataSource))     throw new IllegalArgumentException("String_Node_Str");
    InputDataSourceDesc inputDataSourceDesc=new InputDataSourceDesc(inputDataSource,outputDataSource);
    boolean added=inputDataSources.add(inputDataSourceDesc);
    if (added) {
      if (logger.isTraceEnabled())       logger.trace("String_Node_Str" + inputDataSource.hashCode());
      if (connected > 0) {
        try {
          inputDataSourceDesc.connect(this);
        }
 catch (        IOException ioex) {
          throw new UndeclaredThrowableException(ioex);
        }
      }
      if (outputStream != null)       getOutputStream();
      if (started > 0) {
        try {
          inputDataSourceDesc.start();
        }
 catch (        IOException ioe) {
          throw new UndeclaredThrowableException(ioe);
        }
      }
    }
  }
}