You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2019/07/30 19:14:23 UTC
[commons-dbcp] 02/03: [DBCP-549] Make
org.apache.commons.dbcp2.AbandonedTrace.removeTrace(AbandonedTrace)
null-safe.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-dbcp.git
commit a26c248749b5d1a7e606671203077cd7630fd657
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jul 30 15:10:14 2019 -0400
[DBCP-549] Make
org.apache.commons.dbcp2.AbandonedTrace.removeTrace(AbandonedTrace)
null-safe.
---
src/changes/changes.xml | 3 +++
src/main/java/org/apache/commons/dbcp2/AbandonedTrace.java | 14 +++++++++++++-
.../java/org/apache/commons/dbcp2/DelegatingResultSet.java | 4 ++--
.../apache/commons/dbcp2/PoolableCallableStatement.java | 8 ++------
.../apache/commons/dbcp2/PoolablePreparedStatement.java | 8 ++------
5 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index df7d6f9..3325853 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -112,6 +112,9 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="ggregory" type="update" issue="DBCP-548" due-to="Gary Gregory">
Update Apache Commons Pool from 2.6.1 to 2.7.0.
</action>
+ <action dev="ggregory" type="update" issue="DBCP-549" due-to="Gary Gregory">
+ Make org.apache.commons.dbcp2.AbandonedTrace.removeTrace(AbandonedTrace) null-safe.
+ </action>
</release>
<release version="2.6.0" date="2019-02-14" description="This is a minor release, including bug fixes and enhancements.">
<action dev="chtompki" type="add" issue="DBCP-534" due-to="Peter Wicks">
diff --git a/src/main/java/org/apache/commons/dbcp2/AbandonedTrace.java b/src/main/java/org/apache/commons/dbcp2/AbandonedTrace.java
index 659fe76..aa55882 100644
--- a/src/main/java/org/apache/commons/dbcp2/AbandonedTrace.java
+++ b/src/main/java/org/apache/commons/dbcp2/AbandonedTrace.java
@@ -155,7 +155,7 @@ public class AbandonedTrace implements TrackedUse {
final Iterator<WeakReference<AbandonedTrace>> iter = traceList.iterator();
while (iter.hasNext()) {
final AbandonedTrace traceInList = iter.next().get();
- if (trace.equals(traceInList)) {
+ if (trace != null && trace.equals(traceInList)) {
iter.remove();
break;
} else if (traceInList == null) {
@@ -165,4 +165,16 @@ public class AbandonedTrace implements TrackedUse {
}
}
}
+
+ /**
+ * Removes this object the source object is tracing.
+ *
+ * @param source The object tracing
+ * @since 2.7.0
+ */
+ protected void removeThisTrace(final Object source) {
+ if (source instanceof AbandonedTrace) {
+ AbandonedTrace.class.cast(source).removeTrace(this);
+ }
+ }
}
diff --git a/src/main/java/org/apache/commons/dbcp2/DelegatingResultSet.java b/src/main/java/org/apache/commons/dbcp2/DelegatingResultSet.java
index 3d1483c..86e4d43 100644
--- a/src/main/java/org/apache/commons/dbcp2/DelegatingResultSet.java
+++ b/src/main/java/org/apache/commons/dbcp2/DelegatingResultSet.java
@@ -186,11 +186,11 @@ public final class DelegatingResultSet extends AbandonedTrace implements ResultS
public void close() throws SQLException {
try {
if (statement != null) {
- ((AbandonedTrace) statement).removeTrace(this);
+ removeThisTrace(statement);
statement = null;
}
if (connection != null) {
- ((AbandonedTrace) connection).removeTrace(this);
+ removeThisTrace(connection);
connection = null;
}
resultSet.close();
diff --git a/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java b/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java
index 969a7e1..717e7b2 100644
--- a/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java
+++ b/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java
@@ -67,9 +67,7 @@ public class PoolableCallableStatement extends DelegatingCallableStatement {
// Remove from trace now because this statement will be
// added by the activate method.
- if (getConnectionInternal() != null) {
- getConnectionInternal().removeTrace(this);
- }
+ removeThisTrace(getConnectionInternal());
}
/**
@@ -115,9 +113,7 @@ public class PoolableCallableStatement extends DelegatingCallableStatement {
@Override
public void passivate() throws SQLException {
setClosedInternal(true);
- if (getConnectionInternal() != null) {
- getConnectionInternal().removeTrace(this);
- }
+ removeThisTrace(getConnectionInternal());
// The JDBC spec requires that a statement close any open
// ResultSet's when it is closed.
diff --git a/src/main/java/org/apache/commons/dbcp2/PoolablePreparedStatement.java b/src/main/java/org/apache/commons/dbcp2/PoolablePreparedStatement.java
index 15d933e..222de96 100644
--- a/src/main/java/org/apache/commons/dbcp2/PoolablePreparedStatement.java
+++ b/src/main/java/org/apache/commons/dbcp2/PoolablePreparedStatement.java
@@ -69,9 +69,7 @@ public class PoolablePreparedStatement<K> extends DelegatingPreparedStatement {
// Remove from trace now because this statement will be
// added by the activate method.
- if (getConnectionInternal() != null) {
- getConnectionInternal().removeTrace(this);
- }
+ removeThisTrace(getConnectionInternal());
}
/**
@@ -128,9 +126,7 @@ public class PoolablePreparedStatement<K> extends DelegatingPreparedStatement {
clearBatch();
}
setClosedInternal(true);
- if (getConnectionInternal() != null) {
- getConnectionInternal().removeTrace(this);
- }
+ removeThisTrace(getConnectionInternal());
// The JDBC spec requires that a statement closes any open
// ResultSet's when it is closed.