From c2ba71b0467d57de4e922f924594d336bf3c715a Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Fri, 10 May 2013 17:41:02 -0400 Subject: [PATCH] bug 407781: Under some conditions builtin specs detector could keep running in infinite loop --- .../AbstractBuiltinSpecsDetector.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java index 737e0135a19..09aa575fba3 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java @@ -129,7 +129,9 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti protected List detectedSettingEntries = null; protected int collected = 0; protected volatile boolean isExecuted = false; - private int envPathHash = 0; + + private static final int HASH_NOT_INITIALIZED = -1; + private int envPathHash = HASH_NOT_INITIALIZED; private BuildRunnerHelper buildRunnerHelper; private SDMarkerGenerator markerGenerator = new SDMarkerGenerator(); @@ -399,7 +401,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti protected boolean validateEnvironment() { String envPathValue = environmentMap.get(ENV_PATH); int envPathValueHash = envPathValue != null ? envPathValue.hashCode() : 0; - if (envPathValueHash != envPathHash || envPathValueHash == 0) { + if (envPathValueHash != envPathHash) { envPathHash = envPathValueHash; return false; } @@ -669,7 +671,11 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti private Map createEnvironmentMap(ICConfigurationDescription cfgDescription) { Map envMap = new HashMap(); for (IEnvironmentVariable var : getEnvironmentVariables()) { - envMap.put(var.getName(), var.getValue()); + String name = var.getName(); + if (!envMngr.isVariableCaseSensitive()) { + name = name.toUpperCase(); + } + envMap.put(name, var.getValue()); } return envMap; } @@ -799,7 +805,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti public Element serializeAttributes(Element parentElement) { Element elementProvider = super.serializeAttributes(parentElement); elementProvider.setAttribute(ATTR_CONSOLE, Boolean.toString(isConsoleEnabled)); - if (envPathHash != 0) { + if (envPathHash != HASH_NOT_INITIALIZED) { elementProvider.setAttribute(ATTR_ENV_HASH, Integer.toString(envPathHash)); } return elementProvider; @@ -814,7 +820,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti isConsoleEnabled = Boolean.parseBoolean(consoleValue); } - envPathHash = 0; + envPathHash = HASH_NOT_INITIALIZED; String envPathHashStr = XmlUtil.determineAttributeValue(providerNode, ATTR_ENV_HASH); if (envPathHashStr != null) { try { @@ -852,7 +858,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti clone.isExecuted = false; clone.envMngr = null; clone.environmentMap = null; - clone.envPathHash = 0; + clone.envPathHash = HASH_NOT_INITIALIZED; return clone; }