Program: 76337
Project: 76337
Buggy source:
/** 
 * Propagate the number of fractional firing decided for this actor through the specified output port.   Set or verify the fractional firing for each Actor that is connected through this output port. Any actors that we calculate their firing vector for the first time are moved from remainingActors to pendingActors.
 * @param currentPort The port that we are propagating from.
 * @param firings The current LLMap of fractional firings for eachActor.
 * @param remainingActors The set of actors that have not had theirfractional firing set.
 * @param pendingActors The set of actors that have had their rateset, but have not been propagated onwards.
 * @exception NotSchedulableException If the CompositeActor is notschedulable.
 * @exception IllegalActionException If any called method throws it.
 */
private void _propagateOutputPort(IOPort currentPort,LLMap firings,CircularList remainingActors,CircularList pendingActors) throws NotSchedulableException, IllegalActionException {
  ComponentEntity currentActor=(ComponentEntity)currentPort.getContainer();
  Enumeration connectedOutPorts=currentPort.deepConnectedOutPorts();
  while (connectedOutPorts.hasMoreElements()) {
    IOPort connectedPort=(IOPort)connectedOutPorts.nextElement();
    if (!connectedPort.getContainer().equals(currentPort.getContainer().getContainer())) {
      throw new NotSchedulableException(currentPort,connectedPort,"String_Node_Str" + "String_Node_Str" + "String_Node_Str");
    }
  }
  int currentRate=_getTokenProductionRate(currentPort);
  if (currentRate > 0) {
    Enumeration connectedPorts=currentPort.deepConnectedInPorts();
    while (connectedPorts.hasMoreElements()) {
      IOPort connectedPort=(IOPort)connectedPorts.nextElement();
      ComponentEntity connectedActor=(ComponentEntity)connectedPort.getContainer();
      _debug("String_Node_Str" + connectedActor.getName());
      int connectedRate=_getTokenConsumptionRate(connectedPort);
      Fraction currentFiring=(Fraction)firings.at(currentActor);
      Fraction desiredFiring=currentFiring.multiply(new Fraction(currentRate,connectedRate));
      try {
        Fraction presentFiring=(Fraction)firings.at(connectedActor);
        if (presentFiring.equals(Fraction.ZERO)) {
          firings.putAt(connectedActor,desiredFiring);
          remainingActors.removeOneOf(connectedActor);
          pendingActors.insertLast(connectedActor);
        }
 else         if (!presentFiring.equals(desiredFiring))         throw new NotSchedulableException("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str");
      }
 catch (      NoSuchElementException e) {
        throw new InternalErrorException("String_Node_Str" + "String_Node_Str" + ((ComponentEntity)connectedActor).getName() + "String_Node_Str");
      }
      remainingActors.removeOneOf(connectedActor);
    }
  }
}

Fixed version (ground truth):
/** 
 * Propagate the number of fractional firing decided for this actor through the specified output port.   Set or verify the fractional firing for each Actor that is connected through this output port. Any actors that we calculate their firing vector for the first time are moved from remainingActors to pendingActors.
 * @param currentPort The port that we are propagating from.
 * @param firings The current Map of fractional firings for eachActor.
 * @param remainingActors The set of actors that have not had theirfractional firing set.
 * @param pendingActors The set of actors that have had their rateset, but have not been propagated onwards.
 * @exception NotSchedulableException If the CompositeActor is notschedulable.
 * @exception IllegalActionException If any called method throws it.
 */
private void _propagateOutputPort(IOPort currentPort,Map firings,LinkedList remainingActors,LinkedList pendingActors) throws NotSchedulableException, IllegalActionException {
  ComponentEntity currentActor=(ComponentEntity)currentPort.getContainer();
  Enumeration connectedOutPorts=currentPort.deepConnectedOutPorts();
  while (connectedOutPorts.hasMoreElements()) {
    IOPort connectedPort=(IOPort)connectedOutPorts.nextElement();
    if (!connectedPort.getContainer().equals(currentPort.getContainer().getContainer())) {
      throw new NotSchedulableException(currentPort,connectedPort,"String_Node_Str" + "String_Node_Str" + "String_Node_Str");
    }
  }
  int currentRate=_getTokenProductionRate(currentPort);
  if (currentRate > 0) {
    Enumeration connectedPorts=currentPort.deepConnectedInPorts();
    while (connectedPorts.hasMoreElements()) {
      IOPort connectedPort=(IOPort)connectedPorts.nextElement();
      ComponentEntity connectedActor=(ComponentEntity)connectedPort.getContainer();
      _debug("String_Node_Str" + connectedActor.getName());
      int connectedRate=_getTokenConsumptionRate(connectedPort);
      Fraction currentFiring=(Fraction)firings.get(currentActor);
      Fraction desiredFiring=currentFiring.multiply(new Fraction(currentRate,connectedRate));
      try {
        Fraction presentFiring=(Fraction)firings.get(connectedActor);
        if (presentFiring.equals(Fraction.ZERO)) {
          firings.put(connectedActor,desiredFiring);
          remainingActors.remove(connectedActor);
          pendingActors.addLast(connectedActor);
        }
 else         if (!presentFiring.equals(desiredFiring))         throw new NotSchedulableException("String_Node_Str" + "String_Node_Str" + "String_Node_Str"+ "String_Node_Str");
      }
 catch (      NoSuchElementException e) {
        throw new InternalErrorException("String_Node_Str" + "String_Node_Str" + ((ComponentEntity)connectedActor).getName() + "String_Node_Str");
      }
      _debug("String_Node_Str");
      _debug(firings.toString());
    }
  }
}