Program: 73486
Project: 73486
Buggy source:
/** 
 * Update all future fireAt times. This method should be used when the clock drift for a particular (platform or execution) clock changes, then the future fireAt times will also change. Also keep track of the list of ignored future fireAt times, so that when this director is woken up at those times, the director will not fire.
 * @param realTimeClock The realTimeClock of interest.
 * @throws IllegalActionException If either the original or updated fireAttime is in the past.
 */
public void updateFireAtTimes(RealTimeClock realTimeClock,Time newClockDrift) throws IllegalActionException {
  if (realTimeClock._clockDrift != realTimeClock._previousClockDrift) {
    Time newOracleTime=_getOraclePhysicalTag().timestamp;
    realTimeClock._lastPlatformTime=((newOracleTime.subtract(realTimeClock._lastOracleTime)).multiply(realTimeClock._clockDrift)).add(realTimeClock._lastPlatformTime);
    realTimeClock._lastOracleTime=newOracleTime;
    realTimeClock._previousClockDrift=realTimeClock._clockDrift;
    realTimeClock._clockDrift=newClockDrift;
    if (realTimeClock == _executionTimeClock) {
      _futureExecutionFireAtTimes=_updateFireAtTimes(_futureExecutionFireAtTimes,_ignoredExecutionFireAtTimes,realTimeClock);
    }
 else     if (realTimeClock == _platformTimeClock) {
      _futurePlatformFireAtTimes=_updateFireAtTimes(_futurePlatformFireAtTimes,_ignoredPlatformFireAtTimes,realTimeClock);
      _timedInterruptWakeUpTimes=_updateFireAtTimes(_timedInterruptWakeUpTimes,null,realTimeClock);
    }
 else {
      throw new InternalErrorException(this,null,"String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
    }
  }
}

Fixed version (ground truth):
/** 
 * Update all future fireAt times. This method should be used when the clock drift for a particular (platform or execution) clock changes, then the future fireAt times will also change. Also keep track of the list of ignored future fireAt times, so that when this director is woken up at those times, the director will not fire.
 * @param realTimeClock The realTimeClock of interest.
 * @throws IllegalActionException If either the original or updated fireAttime is in the past.
 */
public void updateFireAtTimes(RealTimeClock realTimeClock,Time newClockDrift) throws IllegalActionException {
  if (realTimeClock._clockDrift.compareTo(newClockDrift) != 0) {
    Time newOracleTime=_getOraclePhysicalTag().timestamp;
    realTimeClock._lastPlatformTime=((newOracleTime.subtract(realTimeClock._lastOracleTime)).multiply(realTimeClock._clockDrift)).add(realTimeClock._lastPlatformTime);
    realTimeClock._lastOracleTime=newOracleTime;
    realTimeClock._clockDrift=newClockDrift;
    if (realTimeClock == _executionTimeClock) {
      _futureExecutionFireAtTimes=(List<Time>)_updateFireAtTimes(_futureExecutionFireAtTimes,_ignoredExecutionFireAtTimes,realTimeClock,newClockDrift);
    }
 else     if (realTimeClock == _platformTimeClock) {
      _futurePlatformFireAtTimes=(List<Time>)_updateFireAtTimes(_futurePlatformFireAtTimes,_ignoredPlatformFireAtTimes,realTimeClock,newClockDrift);
      _timedInterruptTimes=(List<TimedEvent>)_updateFireAtTimes(_timedInterruptTimes,null,realTimeClock,newClockDrift);
    }
 else {
      throw new InternalErrorException(this,null,"String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
    }
  }
}