You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2014/04/13 23:41:04 UTC
svn commit: r1587102 -
/logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.java
Author: rgoers
Date: Sun Apr 13 21:41:04 2014
New Revision: 1587102
URL: http://svn.apache.org/r1587102
Log:
LOG4J2-585 - Change check for Marker to be only on immediate parents
Modified:
logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.java
Modified: logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.java?rev=1587102&r1=1587101&r2=1587102&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.java (original)
+++ logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/MarkerManager.java Sun Apr 13 21:41:04 2014
@@ -90,17 +90,20 @@ public final class MarkerManager {
if (parent == null) {
throw new IllegalArgumentException("A parent marker must be specified");
}
+ // It is not strictly necessary to copy the variable here but it should perform better than
+ // Accessing a volatile variable multiple times.
+ Marker[] localParents = this.parents;
// Don't add a parent that is already in the hierarchy.
- if (parents != null && (this.isInstanceOf(parent) || parent.isInstanceOf(this))) {
+ if (localParents != null && (contains(parent, localParents) || parent.isInstanceOf(this))) {
return this;
}
- int size = parents == null ? 1 : parents.length + 1;
+ int size = localParents == null ? 1 : localParents.length + 1;
Marker[] markers = new Marker[size];
- if (parents != null) {
- System.arraycopy(parents, 0, markers, 0, parents.length);
+ if (localParents != null) {
+ System.arraycopy(localParents, 0, markers, 0, localParents.length);
}
markers[size - 1] = parent;
- parents = markers;
+ this.parents = markers;
return this;
}
@@ -109,22 +112,23 @@ public final class MarkerManager {
if (parent == null) {
throw new IllegalArgumentException("A parent marker must be specified");
}
- if (parents == null) {
+ Marker[] localParents = this.parents;
+ if (localParents == null) {
return false;
}
- if (parents.length == 1) {
- if (parents[0].equals(parent)) {
+ if (localParents.length == 1) {
+ if (localParents[0].equals(parent)) {
parents = null;
return true;
}
return false;
}
int index = 0;
- Marker[] markers = new Marker[parents.length - 1];
- for (int i = 0; i < parents.length; ++i) {
- Marker marker = parents[i];
+ Marker[] markers = new Marker[localParents.length - 1];
+ for (int i = 0; i < localParents.length; ++i) {
+ Marker marker = localParents[i];
if (!marker.equals(parent)) {
- if (index == parents.length - 1) {
+ if (index == localParents.length - 1) {
return false;
}
markers[index++] = marker;
@@ -249,6 +253,19 @@ public final class MarkerManager {
return false;
}
+ /*
+ * Called from add while synchronized.
+ */
+ private boolean contains(Marker parent, Marker[] localParents) {
+
+ for (Marker marker : localParents) {
+ if (marker == parent) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
public boolean equals(final Object o) {
if (this == o) {