Program: 74258
Project: 74258
Buggy source:
public void run(){
  while (!_stopRequested) {
    try {
      if (ThreadedComposite.this._debugging) {
        ThreadedComposite.this._debug("String_Node_Str");
      }
      TokenFrame frame=_inputFrames.take();
      if (frame.type == TokenFrame.STOP) {
        if (ThreadedComposite.this._debugging) {
          ThreadedComposite.this._debug("String_Node_Str");
        }
        break;
      }
      if (ThreadedComposite.this._debugging) {
        ThreadedComposite.this._debug("String_Node_Str" + frame.time + "String_Node_Str"+ frame.tokens);
      }
      _currentTime=frame.time;
      for (      QueuedToken token : frame.tokens) {
        if (token.channel < token.port.getWidthInside()) {
          token.port.sendInside(token.channel,token.token);
        }
      }
      if (!iterateContainedActors()) {
        break;
      }
      List<QueuedToken> outputTokens=new LinkedList<QueuedToken>();
      Iterator ports=outputPortList().iterator();
      while (ports.hasNext()) {
        IOPort port=(IOPort)ports.next();
        for (int i=0; i < port.getWidth(); i++) {
          if (port.isKnownInside(i) && port.hasTokenInside(i)) {
            Token token=port.getInside(i);
            QueuedToken tokenBundle=new QueuedToken(port,i,token);
            outputTokens.add(tokenBundle);
            if (ThreadedComposite.this._debugging) {
              ThreadedComposite.this._debug("String_Node_Str" + token + "String_Node_Str"+ port.getName());
            }
          }
        }
      }
      Time responseTime=_currentTime.add(_delayValue);
synchronized (ThreadedDirector.this) {
        if (_delayValue < 0.0) {
          responseTime=ThreadedDirector.this.fireAtFirstValidTimeAfter(ThreadedComposite.this,_currentTime);
          _outputTimes.add(responseTime.add(_delayValue));
        }
        TokenFrame outputFrame=new TokenFrame(responseTime,outputTokens,TokenFrame.EVENT);
        _outputFrames.add(outputFrame);
        if (ThreadedComposite.this._debugging) {
          ThreadedComposite.this._debug("String_Node_Str");
        }
        ThreadedDirector.this.notifyAll();
        Thread.yield();
      }
    }
 catch (    InterruptedException e) {
      TokenFrame stopFrame=new TokenFrame(_currentTime,null,TokenFrame.STOP);
synchronized (ThreadedDirector.this) {
        _outputFrames.add(stopFrame);
        ThreadedDirector.this.notifyAll();
      }
      break;
    }
catch (    IllegalActionException ex) {
      _exception=ex;
      TokenFrame stopFrame=new TokenFrame(_currentTime,null,TokenFrame.STOP);
synchronized (ThreadedDirector.this) {
        _outputFrames.add(stopFrame);
        ThreadedDirector.this.notifyAll();
      }
      break;
    }
  }
}

Fixed version (ground truth):
public void run(){
  while (!_stopRequested) {
    try {
      if (ThreadedComposite.this._debugging) {
        ThreadedComposite.this._debug("String_Node_Str");
      }
      TokenFrame frame=_inputFrames.take();
      if (frame.type == TokenFrame.STOP) {
        if (ThreadedComposite.this._debugging) {
          ThreadedComposite.this._debug("String_Node_Str");
        }
        break;
      }
      if (ThreadedComposite.this._debugging) {
        ThreadedComposite.this._debug("String_Node_Str" + frame.time + "String_Node_Str"+ frame.tokens);
      }
      _currentTime=frame.time;
      for (      QueuedToken token : frame.tokens) {
        if (token.channel < token.port.getWidthInside()) {
          token.port.sendInside(token.channel,token.token);
        }
      }
      if (!iterateContainedActors()) {
        break;
      }
      List<QueuedToken> outputTokens=new LinkedList<QueuedToken>();
      Iterator ports=outputPortList().iterator();
      while (ports.hasNext()) {
        IOPort port=(IOPort)ports.next();
        for (int i=0; i < port.getWidth(); i++) {
          if (port.isKnownInside(i) && port.hasTokenInside(i)) {
            Token token=port.getInside(i);
            QueuedToken tokenBundle=new QueuedToken(port,i,token);
            outputTokens.add(tokenBundle);
            if (ThreadedComposite.this._debugging) {
              ThreadedComposite.this._debug("String_Node_Str" + token + "String_Node_Str"+ port.getName());
            }
          }
        }
      }
      Time responseTime=_currentTime.add(_delayValue);
synchronized (ThreadedDirector.this) {
        if (_delayValue < 0.0) {
          responseTime=ThreadedDirector.this.fireAtFirstValidTimeAfter(ThreadedComposite.this,_currentTime);
          _outputTimes.add(responseTime.add(_delayValue));
        }
        TokenFrame outputFrame=new TokenFrame(responseTime,outputTokens,TokenFrame.EVENT);
        _outputFrames.add(outputFrame);
        if (ThreadedComposite.this._debugging) {
          ThreadedComposite.this._debug("String_Node_Str");
        }
        ThreadedDirector.this.notifyAll();
        Thread.yield();
      }
    }
 catch (    InterruptedException e) {
      TokenFrame stopFrame=new TokenFrame(_currentTime,null,TokenFrame.STOP);
synchronized (ThreadedDirector.this) {
        _outputFrames.add(stopFrame);
        ThreadedDirector.this.notifyAll();
      }
      break;
    }
catch (    IllegalActionException ex) {
synchronized (ThreadedDirector.this) {
        _exception=ex;
        TokenFrame stopFrame=new TokenFrame(_currentTime,null,TokenFrame.STOP);
        _outputFrames.add(stopFrame);
        ThreadedDirector.this.notifyAll();
      }
      break;
    }
  }
}