Program: 103685
Project: 103685
Buggy source:
/** 
 * Starts the processing of media in this instance in a specific direction.
 * @param direction a <tt>MediaDirection</tt> value which represents thedirection of the processing of media to be started. For example, {@link MediaDirection#SENDRECV} to start both capture and playback ofmedia in this instance or  {@link MediaDirection#SENDONLY} to only startthe capture of media in this instance
 */
@SuppressWarnings("String_Node_Str") private void start(MediaDirection direction){
  if (direction == null)   throw new NullPointerException("String_Node_Str");
  if (direction.allowsSending() && ((startedDirection == null) || !startedDirection.allowsSending())) {
    startSendStreams();
    getDeviceSession().start(MediaDirection.SENDONLY);
    if (MediaDirection.RECVONLY.equals(startedDirection))     startedDirection=MediaDirection.SENDRECV;
 else     if (startedDirection == null)     startedDirection=MediaDirection.SENDONLY;
  }
  if (direction.allowsReceiving() && ((startedDirection == null) || !startedDirection.allowsReceiving())) {
    RTPManager rtpManager=getRTPManager();
    Iterable<ReceiveStream> receiveStreams;
    try {
      receiveStreams=rtpManager.getReceiveStreams();
    }
 catch (    Exception e) {
      logger.trace("String_Node_Str",e);
      receiveStreams=null;
    }
    if (receiveStreams != null)     for (    ReceiveStream receiveStream : receiveStreams)     try {
      DataSource receiveStreamDataSource=receiveStream.getDataSource();
      if (receiveStreamDataSource != null)       receiveStreamDataSource.start();
    }
 catch (    IOException ioe) {
      logger.warn("String_Node_Str" + receiveStream,ioe);
    }
    getDeviceSession().start(MediaDirection.RECVONLY);
    if (MediaDirection.SENDONLY.equals(startedDirection))     startedDirection=MediaDirection.SENDRECV;
 else     if (startedDirection == null)     startedDirection=MediaDirection.RECVONLY;
  }
}

Fixed version (ground truth):
/** 
 * Starts the processing of media in this instance in a specific direction.
 * @param direction a <tt>MediaDirection</tt> value which represents thedirection of the processing of media to be started. For example, {@link MediaDirection#SENDRECV} to start both capture and playback ofmedia in this instance or  {@link MediaDirection#SENDONLY} to only startthe capture of media in this instance
 */
private void start(MediaDirection direction){
  if (direction == null)   throw new NullPointerException("String_Node_Str");
  if (direction.allowsSending() && ((startedDirection == null) || !startedDirection.allowsSending())) {
    startSendStreams();
    getDeviceSession().start(MediaDirection.SENDONLY);
    if (MediaDirection.RECVONLY.equals(startedDirection))     startedDirection=MediaDirection.SENDRECV;
 else     if (startedDirection == null)     startedDirection=MediaDirection.SENDONLY;
  }
  if (direction.allowsReceiving() && ((startedDirection == null) || !startedDirection.allowsReceiving())) {
    startReceiveStreams();
    getDeviceSession().start(MediaDirection.RECVONLY);
    if (MediaDirection.SENDONLY.equals(startedDirection))     startedDirection=MediaDirection.SENDRECV;
 else     if (startedDirection == null)     startedDirection=MediaDirection.RECVONLY;
  }
}