Program: 107628
Project: 107628
Buggy source:
/** 
 * Starts this <tt>PacketTransformer</tt>.
 */
private synchronized void start(){
  if (this.datagramTransport != null) {
    if ((this.connectThread == null) && (dtlsTransport == null)) {
      logger.warn(getClass().getName() + "String_Node_Str" + "String_Node_Str");
    }
    return;
  }
  int dtlsProtocol=this.dtlsProtocol;
  if ((dtlsProtocol != DtlsControl.DTLS_CLIENT_PROTOCOL) && (dtlsProtocol != DtlsControl.DTLS_SERVER_PROTOCOL))   throw new IllegalStateException("String_Node_Str");
  AbstractRTPConnector connector=this.connector;
  if (connector == null)   throw new NullPointerException("String_Node_Str");
  SecureRandom secureRandom=new SecureRandom();
  final DTLSProtocol dtlsProtocolObj;
  final TlsPeer tlsPeer;
  if (dtlsProtocol == DtlsControl.DTLS_CLIENT_PROTOCOL) {
    dtlsProtocolObj=new DTLSClientProtocol(secureRandom);
    tlsPeer=new TlsClientImpl(this);
  }
 else {
    dtlsProtocolObj=new DTLSServerProtocol(secureRandom);
    tlsPeer=new TlsServerImpl(this);
  }
  final DatagramTransportImpl datagramTransport=new DatagramTransportImpl(componentID);
  datagramTransport.setConnector(connector);
  Thread connectThread=new Thread(){
    @Override public void run(){
      try {
        runInConnectThread(dtlsProtocolObj,tlsPeer,datagramTransport);
      }
  finally {
        if (Thread.currentThread().equals(DtlsPacketTransformer.this.connectThread)) {
          DtlsPacketTransformer.this.connectThread=null;
        }
      }
    }
  }
;
  connectThread.setDaemon(true);
  connectThread.setName(DtlsPacketTransformer.class.getName() + "String_Node_Str");
  this.connectThread=connectThread;
  this.datagramTransport=datagramTransport;
  boolean started=false;
  try {
    connectThread.start();
    started=true;
  }
  finally {
    if (!started) {
      if (connectThread.equals(this.connectThread))       this.connectThread=null;
      if (datagramTransport.equals(this.datagramTransport))       this.datagramTransport=null;
    }
  }
  notifyAll();
}

Fixed version (ground truth):
/** 
 * Starts this <tt>PacketTransformer</tt>.
 */
private synchronized void start(){
  if (this.datagramTransport != null) {
    if ((this.connectThread == null) && (dtlsTransport == null)) {
      logger.warn(getClass().getName() + "String_Node_Str" + "String_Node_Str");
    }
    return;
  }
  AbstractRTPConnector connector=this.connector;
  if (connector == null)   throw new NullPointerException("String_Node_Str");
  DtlsControl.Setup setup=this.setup;
  SecureRandom secureRandom=new SecureRandom();
  final DTLSProtocol dtlsProtocolObj;
  final TlsPeer tlsPeer;
  if (DtlsControl.Setup.ACTIVE.equals(setup)) {
    dtlsProtocolObj=new DTLSClientProtocol(secureRandom);
    tlsPeer=new TlsClientImpl(this);
  }
 else {
    dtlsProtocolObj=new DTLSServerProtocol(secureRandom);
    tlsPeer=new TlsServerImpl(this);
  }
  final DatagramTransportImpl datagramTransport=new DatagramTransportImpl(componentID);
  datagramTransport.setConnector(connector);
  Thread connectThread=new Thread(){
    @Override public void run(){
      try {
        runInConnectThread(dtlsProtocolObj,tlsPeer,datagramTransport);
      }
  finally {
        if (Thread.currentThread().equals(DtlsPacketTransformer.this.connectThread)) {
          DtlsPacketTransformer.this.connectThread=null;
        }
      }
    }
  }
;
  connectThread.setDaemon(true);
  connectThread.setName(DtlsPacketTransformer.class.getName() + "String_Node_Str");
  this.connectThread=connectThread;
  this.datagramTransport=datagramTransport;
  boolean started=false;
  try {
    connectThread.start();
    started=true;
  }
  finally {
    if (!started) {
      if (connectThread.equals(this.connectThread))       this.connectThread=null;
      if (datagramTransport.equals(this.datagramTransport))       this.datagramTransport=null;
    }
  }
  notifyAll();
}