Browse Source

XmlLogger could lose messages when parallel is used. PR 25734. Based on analysis and patch by Craig Sandvik

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@675993 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 17 years ago
parent
commit
f110a5fb7a
4 changed files with 24 additions and 8 deletions
  1. +1
    -0
      CONTRIBUTORS
  2. +3
    -0
      WHATSNEW
  3. +4
    -0
      contributors.xml
  4. +16
    -8
      src/main/org/apache/tools/ant/XmlLogger.java

+ 1
- 0
CONTRIBUTORS View File

@@ -44,6 +44,7 @@ Craeg Strong
Craig Cottingham Craig Cottingham
Craig R. McClanahan Craig R. McClanahan
Craig Ryan Craig Ryan
Craig Sandvik
Curtis White Curtis White
Cyrille Morvan Cyrille Morvan
D'Arcy Smith D'Arcy Smith


+ 3
- 0
WHATSNEW View File

@@ -101,6 +101,9 @@ Fixed bugs:
parts, some result sets wouldn't get printed. parts, some result sets wouldn't get printed.
Bugzilla Report 32168. Bugzilla Report 32168.


* XmlLogger could lose messages if <parallel> is used.
Bugzilla Report 25734.

Other changes: Other changes:
-------------- --------------




+ 4
- 0
contributors.xml View File

@@ -199,6 +199,10 @@
<first>Craig</first> <first>Craig</first>
<last>Ryan</last> <last>Ryan</last>
</name> </name>
<name>
<first>Craig</first>
<last>Sandvik</last>
</name>
<name> <name>
<first>Curtis</first> <first>Curtis</first>
<last>White</last> <last>White</last>


+ 16
- 8
src/main/org/apache/tools/ant/XmlLogger.java View File

@@ -33,6 +33,7 @@ import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.StringUtils; import org.apache.tools.ant.util.StringUtils;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.Text; import org.w3c.dom.Text;


/** /**
@@ -172,7 +173,7 @@ public class XmlLogger implements BuildLogger {
Text errText = doc.createCDATASection(StringUtils.getStackTrace(t)); Text errText = doc.createCDATASection(StringUtils.getStackTrace(t));
Element stacktrace = doc.createElement(STACKTRACE_TAG); Element stacktrace = doc.createElement(STACKTRACE_TAG);
stacktrace.appendChild(errText); stacktrace.appendChild(errText);
buildElement.element.appendChild(stacktrace);
synchronizedAppend(buildElement.element, stacktrace);
} }
String outFilename = event.getProject().getProperty("XmlLogger.file"); String outFilename = event.getProject().getProperty("XmlLogger.file");
if (outFilename == null) { if (outFilename == null) {
@@ -267,9 +268,10 @@ public class XmlLogger implements BuildLogger {
} }
} }
if (parentElement == null) { if (parentElement == null) {
buildElement.element.appendChild(targetElement.element);
synchronizedAppend(buildElement.element, targetElement.element);
} else { } else {
parentElement.element.appendChild(targetElement.element);
synchronizedAppend(parentElement.element,
targetElement.element);
} }
} }
targets.remove(target); targets.remove(target);
@@ -320,9 +322,9 @@ public class XmlLogger implements BuildLogger {
targetElement = (TimedElement) targets.get(target); targetElement = (TimedElement) targets.get(target);
} }
if (targetElement == null) { if (targetElement == null) {
buildElement.element.appendChild(taskElement.element);
synchronizedAppend(buildElement.element, taskElement.element);
} else { } else {
targetElement.element.appendChild(taskElement.element);
synchronizedAppend(targetElement.element, taskElement.element);
} }
Stack threadStack = getStack(); Stack threadStack = getStack();
if (!threadStack.empty()) { if (!threadStack.empty()) {
@@ -394,7 +396,7 @@ public class XmlLogger implements BuildLogger {
Text errText = doc.createCDATASection(StringUtils.getStackTrace(ex)); Text errText = doc.createCDATASection(StringUtils.getStackTrace(ex));
Element stacktrace = doc.createElement(STACKTRACE_TAG); Element stacktrace = doc.createElement(STACKTRACE_TAG);
stacktrace.appendChild(errText); stacktrace.appendChild(errText);
buildElement.element.appendChild(stacktrace);
synchronizedAppend(buildElement.element, stacktrace);
} }
Text messageText = doc.createCDATASection(event.getMessage()); Text messageText = doc.createCDATASection(event.getMessage());
messageElement.appendChild(messageText); messageElement.appendChild(messageText);
@@ -411,9 +413,9 @@ public class XmlLogger implements BuildLogger {
parentElement = (TimedElement) targets.get(target); parentElement = (TimedElement) targets.get(target);
} }
if (parentElement != null) { if (parentElement != null) {
parentElement.element.appendChild(messageElement);
synchronizedAppend(parentElement.element, messageElement);
} else { } else {
buildElement.element.appendChild(messageElement);
synchronizedAppend(buildElement.element, messageElement);
} }
} }


@@ -459,4 +461,10 @@ public class XmlLogger implements BuildLogger {
public void setErrorPrintStream(PrintStream err) { public void setErrorPrintStream(PrintStream err) {
} }


private void synchronizedAppend(Node parent, Node child) {
synchronized(parent) {
parent.appendChild(child);
}
}

} }

Loading…
Cancel
Save