Issue Details (XML | Word | Printable)

Key: DERBY-3316
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Kathey Marsden
Reporter: Kathey Marsden
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Derby

Leak in client if ResultSet not closed

Created: 11/Jan/08 03:26 PM   Updated: 30/Jun/09 03:55 PM
Return to search
Component/s: Network Client
Affects Version/s: 10.2.1.6, 10.3.2.1, 10.4.1.3
Fix Version/s: 10.3.3.0, 10.4.1.3

Time Tracking:
Not Specified

File Attachments:
  Size
Text File Licensed for inclusion in ASF works derby-3316_diff.txt 2008-01-14 08:56 PM Kathey Marsden 4 kB
Text File Licensed for inclusion in ASF works derby-3316_diff2.txt 2008-01-15 04:42 PM Kathey Marsden 4 kB
Text File Licensed for inclusion in ASF works move_derbystress_to_derbyall_diff.txt 2008-01-17 04:41 PM Kathey Marsden 1 kB
Java Source File Licensed for inclusion in ASF works RepeatStatement.java 2008-01-11 03:27 PM Kathey Marsden 1 kB
Issue Links:
Reference
 

Bug behavior facts: Regression
Resolution Date: 15/Jan/08 11:47 PM


 Description  « Hide
If I run the attached program RepeatStatement.java with 32M of heap,
I will get an OutOfMemory error in the client.

java -Xmx32M RepeatStatement
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
       at org.apache.derby.client.am.Cursor.allocateCharBuffer(Cursor.java:1260)
       at org.apache.derby.client.net.NetStatementReply.parseSQLDTARDarray(NetStatementReply.java:1356)
       at org.apache.derby.client.net.NetStatementReply.parseQRYDSC(NetStatementReply.java:1207)
       at org.apache.derby.client.net.NetStatementReply.parseOpenQuery(NetStatementReply.java:479)
       at org.apache.derby.client.net.NetStatementReply.parseOPNQRYreply(NetStatementReply.java:223)
       at org.apache.derby.client.net.NetStatementReply.readOpenQuery(NetStatementReply.java:64)
       at org.apache.derby.client.net.StatementReply.readOpenQuery(StatementReply.java:50)
       at org.apache.derby.client.net.NetStatement.readOpenQuery_(NetStatement.java:153)
       at org.apache.derby.client.am.Statement.readOpenQuery(Statement.java:1396)
       at org.apache.derby.client.am.Statement.flowExecute(Statement.java:2001)
       at org.apache.derby.client.am.Statement.executeQueryX(Statement.java:421)
       at org.apache.derby.client.am.Statement.executeQuery(Statement.java:406)
       at RepeatStatement.testInsertAndSelect(RepeatStatement.java:31)
       at RepeatStatement.main(RepeatStatement.java:10)

If I close the ResultSet or Statement it does not leak.

This occurs on trunk and 10.2.1.6. It does however not run out of memory on 10.1.3.1, so appears to be a regression.

 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Repository Revision Date User Message
ASF #612262 Tue Jan 15 22:36:38 UTC 2008 kmarsden DERBY-3316 Leak in client if ResultSet not closed

The leak was in SectionManager.positionedUpdateCursorNameToResultSet_ which kept a reference to the ResultSet so it wouldn't get garbage collected. The solution was to use a WeakReference to the ResultSets in positionedUpdateCursorNameToResultSet_ so that they can be garbage collected.
Files Changed
MODIFY /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/derbyStress.java
MODIFY /db/derby/code/trunk/java/client/org/apache/derby/client/am/SectionManager.java
MODIFY /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/derbyStress.out

Repository Revision Date User Message
ASF #612316 Tue Jan 15 23:46:07 UTC 2008 kmarsden DERBY-3316 Leak in client if ResultSet not closed

Merge 612262 from trunk
Files Changed
MODIFY /db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/derbyStress.java
MODIFY /db/derby/code/branches/10.3/java/client/org/apache/derby/client/am/SectionManager.java
MODIFY /db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/functionTests/master/derbyStress.out