You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by km...@apache.org on 2005/10/07 00:55:37 UTC

svn commit: r306950 - in /db/derby/code/branches/10.1/java/client/org/apache/derby/client/am: PreparedStatement.java ResultSet.java Statement.java

Author: kmarsden
Date: Thu Oct  6 15:55:33 2005
New Revision: 306950

URL: http://svn.apache.org/viewcvs?rev=306950&view=rev
Log:
DERBY-557
Client driver gets OutOfMemoryError when re-executing statement without closing ResultSet
Merged from trunk with
 svn merge -r 289538:289539 https://svn.apache.org/repos/asf/db/derby/code/trunk

Contributed by Knut Anders Hatlen


Modified:
    db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/PreparedStatement.java
    db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/ResultSet.java
    db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/Statement.java

Modified: db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/PreparedStatement.java
URL: http://svn.apache.org/viewcvs/db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/PreparedStatement.java?rev=306950&r1=306949&r2=306950&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/PreparedStatement.java (original)
+++ db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/PreparedStatement.java Thu Oct  6 15:55:33 2005
@@ -1367,7 +1367,7 @@
                 connection_.completeTransactionStart();
             }
 
-            super.markResultSetsClosed();
+            super.markResultSetsClosed(true); // true means remove from list of commit and rollback listeners
 
             switch (sqlMode_) {
             case isUpdate__:

Modified: db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/ResultSet.java
URL: http://svn.apache.org/viewcvs/db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/ResultSet.java?rev=306950&r1=306949&r2=306950&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/ResultSet.java (original)
+++ db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/ResultSet.java Thu Oct  6 15:55:33 2005
@@ -388,8 +388,7 @@
                 flowAutoCommitIfNotAutoCommitted(); // in case of early close
             }
         } finally {
-            markClosed();
-            connection_.CommitAndRollbackListeners_.remove(this);
+            markClosed(true);
         }
 
         flowAutoCommitIfLastOpenMultipleResultSetWasJustClosed();
@@ -3014,12 +3013,31 @@
         }
     }
 
+    /**
+     * Mark this ResultSet as closed. The ResultSet will not be
+     * removed from the commit and rollback listeners list in
+     * <code>org.apache.derby.client.am.Connection</code>.
+     */
     void markClosed() {
+        markClosed(false);
+    }
+
+    /**
+     * Mark this ResultSet as closed.
+     *
+     * @param removeListener if true the ResultSet will be removed
+     * from the commit and rollback listeners list in
+     * <code>org.apache.derby.client.am.Connection</code>.
+     */
+    void markClosed(boolean removeListener) {
         openOnClient_ = false;
         openOnServer_ = false;
         statement_.resetCursorNameAndRemoveFromWhereCurrentOfMappings(); // for SELECT...FOR UPDATE queries
         statement_.removeClientCursorNameFromCache();
         markPositionedUpdateDeletePreparedStatementsClosed();
+        if (removeListener) {
+            connection_.CommitAndRollbackListeners_.remove(this);
+        }
     }
 
     void markClosedOnServer() {

Modified: db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/Statement.java
URL: http://svn.apache.org/viewcvs/db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/Statement.java?rev=306950&r1=306949&r2=306950&view=diff
==============================================================================
--- db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/Statement.java (original)
+++ db/derby/code/branches/10.1/java/client/org/apache/derby/client/am/Statement.java Thu Oct  6 15:55:33 2005
@@ -1393,20 +1393,38 @@
         }
     }
 
+    /**
+     * Mark all ResultSets associated with this statement as
+     * closed. The ResultSets will not be removed from the commit and
+     * rollback listeners list in
+     * <code>org.apache.derby.client.am.Connection</code>.
+     */
     void markResultSetsClosed() {
+        markResultSetsClosed(false);
+    }
+
+    /**
+     * Mark all ResultSets associated with this statement as
+     * closed.
+     *
+     * @param removeListener if true the ResultSets will be removed
+     * from the commit and rollback listeners list in
+     * <code>org.apache.derby.client.am.Connection</code>.
+     */
+    void markResultSetsClosed(boolean removeListener) {
         if (resultSetList_ != null) {
             for (int i = 0; i < resultSetList_.length; i++) {
                 if (resultSetList_[i] != null) {
-                    resultSetList_[i].markClosed();
+                    resultSetList_[i].markClosed(removeListener);
                 }
                 resultSetList_[i] = null;
             }
         }
         if (generatedKeysResultSet_ != null) {
-            generatedKeysResultSet_.markClosed();
+            generatedKeysResultSet_.markClosed(removeListener);
         }
         if (resultSet_ != null) {
-            resultSet_.markClosed();
+            resultSet_.markClosed(removeListener);
         }
         resultSet_ = null;
         resultSetList_ = null;
@@ -1544,7 +1562,7 @@
                 connection_.completeTransactionStart();
             }
 
-            markResultSetsClosed();
+            markResultSetsClosed(true); // true means remove from list of commit and rollback listeners
             markClosedOnServer();
             section_ = newSection;