Program: 177471
Project: 177471
Buggy source:
private void copySnapshot(List<AsyncExecutor> executors) throws InterruptedException {
  TickStage.setStage(TickStage.FINALIZE);
  for (  AsyncExecutor e : executors) {
    if (!e.finalizeTick()) {
      throw new IllegalStateException("String_Node_Str");
    }
  }
  boolean joined=false;
  while (!joined) {
    try {
      AsyncExecutorUtils.pulseJoinAll(executors,(PULSE_EVERY << 4));
      joined=true;
    }
 catch (    TimeoutException e) {
      if (((SpoutEngine)Spout.getEngine()).isSetupComplete()) {
        server.getLogger().info("String_Node_Str" + (PULSE_EVERY << 4) + "String_Node_Str");
        AsyncExecutorUtils.dumpAllStacks();
        AsyncExecutorUtils.checkForDeadlocks();
      }
    }
  }
  lockSnapshotLock();
  TickStage.setStage(TickStage.PRESNAPSHOT);
  try {
    for (    AsyncExecutor e : executors) {
      if (!e.preSnapshot()) {
        throw new IllegalStateException("String_Node_Str");
      }
    }
    joined=false;
    while (!joined) {
      try {
        AsyncExecutorUtils.pulseJoinAll(executors,(PULSE_EVERY << 4));
        joined=true;
      }
 catch (      TimeoutException e) {
        if (((SpoutEngine)Spout.getEngine()).isSetupComplete()) {
          server.getLogger().info("String_Node_Str" + (PULSE_EVERY << 4) + "String_Node_Str");
          AsyncExecutorUtils.dumpAllStacks();
        }
      }
    }
    TickStage.setStage(TickStage.SNAPSHOT);
    for (    AsyncExecutor e : executors) {
      if (!e.copySnapshot()) {
        throw new IllegalStateException("String_Node_Str");
      }
    }
    joined=false;
    while (!joined) {
      try {
        AsyncExecutorUtils.pulseJoinAll(executors,(PULSE_EVERY << 4));
        joined=true;
      }
 catch (      TimeoutException e) {
        if (((SpoutEngine)Spout.getEngine()).isSetupComplete()) {
          server.getLogger().info("String_Node_Str" + (PULSE_EVERY << 4) + "String_Node_Str");
          AsyncExecutorUtils.dumpAllStacks();
        }
      }
    }
  }
  finally {
    unlockSnapshotLock();
  }
}

Fixed version (ground truth):
private void copySnapshot(List<AsyncExecutor> executors) throws InterruptedException {
  TickStage.setStage(TickStage.FINALIZE);
  for (  AsyncExecutor e : executors) {
    if (!e.finalizeTick()) {
      throw new IllegalStateException("String_Node_Str");
    }
  }
  boolean joined=false;
  while (!joined) {
    try {
      AsyncExecutorUtils.pulseJoinAll(executors,(PULSE_EVERY << 4));
      joined=true;
    }
 catch (    TimeoutException e) {
      if (((SpoutEngine)Spout.getEngine()).isSetupComplete()) {
        engine.getLogger().info("String_Node_Str" + (PULSE_EVERY << 4) + "String_Node_Str");
        AsyncExecutorUtils.dumpAllStacks();
        AsyncExecutorUtils.checkForDeadlocks();
      }
    }
  }
  lockSnapshotLock();
  TickStage.setStage(TickStage.PRESNAPSHOT);
  try {
    for (    AsyncExecutor e : executors) {
      if (!e.preSnapshot()) {
        throw new IllegalStateException("String_Node_Str");
      }
    }
    joined=false;
    while (!joined) {
      try {
        AsyncExecutorUtils.pulseJoinAll(executors,(PULSE_EVERY << 4));
        joined=true;
      }
 catch (      TimeoutException e) {
        if (((SpoutEngine)Spout.getEngine()).isSetupComplete()) {
          engine.getLogger().info("String_Node_Str" + (PULSE_EVERY << 4) + "String_Node_Str");
          AsyncExecutorUtils.dumpAllStacks();
        }
      }
    }
    TickStage.setStage(TickStage.SNAPSHOT);
    for (    AsyncExecutor e : executors) {
      if (!e.copySnapshot()) {
        throw new IllegalStateException("String_Node_Str");
      }
    }
    joined=false;
    while (!joined) {
      try {
        AsyncExecutorUtils.pulseJoinAll(executors,(PULSE_EVERY << 4));
        joined=true;
      }
 catch (      TimeoutException e) {
        if (((SpoutEngine)Spout.getEngine()).isSetupComplete()) {
          engine.getLogger().info("String_Node_Str" + (PULSE_EVERY << 4) + "String_Node_Str");
          AsyncExecutorUtils.dumpAllStacks();
        }
      }
    }
  }
  finally {
    unlockSnapshotLock();
  }
}