Program: 88591
Project: 88591
Buggy source:
@Override public void onException(JMSException exception){
  if (exceptionHandlerRunning) {
    return;
  }
  exceptionHandlerRunning=true;
  MMSAction.setDisabled(exceptionHandlerRunning);
  Application.getInstance().getGUILog().log("String_Node_Str" + project.getName() + "String_Node_Str");
  JMSSyncProjectEventListenerAdapter.getProjectMapping(project).setDisabled(true);
  while (shouldAttemptToReconnect()) {
    int delay=Math.min(600,(int)Math.pow(2,reconnectionAttempts++));
    Application.getInstance().getGUILog().log("String_Node_Str" + project.getName() + "String_Node_Str"+ delay+ "String_Node_Str"+ (delay != 1 ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str");
    try {
      Thread.sleep(delay * 1000);
    }
 catch (    InterruptedException ignored) {
    }
    if (!exceptionHandlerRunning) {
      return;
    }
    if (shouldAttemptToReconnect()) {
      MMSSyncPlugin.getInstance().getJmsSyncProjectEventListenerAdapter().closeJMS(project);
      MMSSyncPlugin.getInstance().getJmsSyncProjectEventListenerAdapter().initializeJMS(project);
    }
  }
  if (!JMSSyncProjectEventListenerAdapter.getProjectMapping(project).isDisabled()) {
    reconnectionAttempts=0;
    Application.getInstance().getGUILog().log("String_Node_Str" + project.getName() + "String_Node_Str");
  }
 else {
    Application.getInstance().getGUILog().log("String_Node_Str" + project.getName() + "String_Node_Str");
    EMSLogoutAction.logoutAction();
  }
  reconnectionAttempts=0;
  exceptionHandlerRunning=false;
  MMSAction.setDisabled(exceptionHandlerRunning);
}

Fixed version (ground truth):
@Override public void onException(JMSException exception){
  if (exceptionHandlerRunning.get()) {
    return;
  }
  exceptionHandlerRunning.set(true);
  MMSAction.setDisabled(exceptionHandlerRunning.get());
  Application.getInstance().getGUILog().log("String_Node_Str" + project.getName() + "String_Node_Str");
  JMSSyncProjectEventListenerAdapter.getProjectMapping(project).setDisabled(true);
  while (shouldAttemptToReconnect()) {
    int delay=Math.min(600,(int)Math.pow(2,reconnectionAttempts++));
    Application.getInstance().getGUILog().log("String_Node_Str" + project.getName() + "String_Node_Str"+ delay+ "String_Node_Str"+ (delay != 1 ? "String_Node_Str" : "String_Node_Str")+ "String_Node_Str");
    try {
      Thread.sleep(delay * 1000);
    }
 catch (    InterruptedException ignored) {
    }
    if (!exceptionHandlerRunning.get()) {
      return;
    }
    if (shouldAttemptToReconnect()) {
      MMSSyncPlugin.getInstance().getJmsSyncProjectEventListenerAdapter().closeJMS(project);
      MMSSyncPlugin.getInstance().getJmsSyncProjectEventListenerAdapter().initializeJMS(project);
    }
  }
  if (!JMSSyncProjectEventListenerAdapter.getProjectMapping(project).isDisabled()) {
    reconnectionAttempts=0;
    Application.getInstance().getGUILog().log("String_Node_Str" + project.getName() + "String_Node_Str");
  }
 else {
    Application.getInstance().getGUILog().log("String_Node_Str" + project.getName() + "String_Node_Str");
    EMSLogoutAction.logoutAction();
  }
  reconnectionAttempts=0;
  exceptionHandlerRunning.set(false);
  MMSAction.setDisabled(exceptionHandlerRunning.get());
}