[
https://issues.apache.org/jira/browse/DERBY-2689?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12503705
]
Manish Khettry commented on DERBY-2689:
---------------------------------------
Thought I'd update the bug with what I'm trying right now--I think option 2
outlined in Brian's earlier comment is the cleanest in this case. I have moved
the cleanup activation code to the constructor for EmbedConnection after the
call to getActivation around line ~140 or so.
try {
preparedStatement = lcc.prepareInternalStatement
(lcc.getDefaultSchema(), sql,
resultSetConcurrency==JDBC20Translation.CONCUR_READ_ONLY, forMetaData);
addWarning(preparedStatement.getCompileTimeWarnings());
activation = preparedStatement.getActivation(lcc,
resultSetType == JDBC20Translation.TYPE_SCROLL_INSENSITIVE);
// DERBY-2689. Close unused activations here
when I'm not inside a monitor.
lcc.closeUnusedActivations();
I've been running the test case for both this bug and DERBY-418 to make sure
that we have no deadlocks and no memory leaks.
> Deadlock with GenericPreparedStatement
> --------------------------------------
>
> Key: DERBY-2689
> URL: https://issues.apache.org/jira/browse/DERBY-2689
> Project: Derby
> Issue Type: Bug
> Components: JDBC
> Affects Versions: 10.2.2.0
> Environment: Windows
> Reporter: Marc Ewert
> Assignee: Manish Khettry
> Priority: Critical
> Attachments: TestDerbyPreparedStatements.java
>
>
> We encountered two times a deadlock inside of derby. It seems that we can't
> workaround it. The involved two threads are attached, it looks like a
> classical deadlock:
> "Thread-22" daemon prio=6 tid=0x0cdaa400 nid=0x1c0 waiting for monitor entry
> [0x1317f000..0x1317fd4c]
> java.lang.Thread.State: BLOCKED (on object monitor)
> at org.apache.derby.impl.sql.GenericPreparedStatement.finish(Unknown
> Source)
> - waiting to lock <0x052f4d70> (a
> org.apache.derby.impl.sql.GenericPreparedStatement)
> at org.apache.derby.impl.sql.execute.BaseActivation.close(Unknown
> Source)
> at
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.addActivation(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.BaseActivation.initFromContext(Unknown
> Source)
> at
> org.apache.derby.impl.services.reflect.LoadedGeneratedClass.newInstance(Unknown
> Source)
> at
> org.apache.derby.impl.services.reflect.ReflectGeneratedClass.newInstance(Unknown
> Source)
> at org.apache.derby.impl.sql.GenericActivationHolder.<init>(Unknown
> Source)
> at
> org.apache.derby.impl.sql.GenericPreparedStatement.getActivation(Unknown
> Source)
> - locked <0x05306f88> (a
> org.apache.derby.impl.sql.GenericPreparedStatement)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown
> Source)
> at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown
> Source)
> - locked <0x047beb00> (a org.apache.derby.impl.jdbc.EmbedConnection40)
> at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown
> Source)
> [custom methods]
> "ThreadPoolThread-SyncScheduler-3-1" prio=2 tid=0x0e620400 nid=0xfec waiting
> for monitor entry [0x10a7e000..0x10a7fa14]
> java.lang.Thread.State: BLOCKED (on object monitor)
> at org.apache.derby.impl.sql.GenericPreparedStatement.finish(Unknown
> Source)
> - waiting to lock <0x05306f88> (a
> org.apache.derby.impl.sql.GenericPreparedStatement)
> at org.apache.derby.impl.sql.execute.BaseActivation.close(Unknown
> Source)
> at
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.addActivation(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.BaseActivation.initFromContext(Unknown
> Source)
> at
> org.apache.derby.impl.services.reflect.LoadedGeneratedClass.newInstance(Unknown
> Source)
> at
> org.apache.derby.impl.services.reflect.ReflectGeneratedClass.newInstance(Unknown
> Source)
> at org.apache.derby.impl.sql.GenericActivationHolder.<init>(Unknown
> Source)
> at
> org.apache.derby.impl.sql.GenericPreparedStatement.getActivation(Unknown
> Source)
> - locked <0x052f4d70> (a
> org.apache.derby.impl.sql.GenericPreparedStatement)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown
> Source)
> at org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown
> Source)
> - locked <0x04225178> (a org.apache.derby.impl.jdbc.EmbedConnection40)
> at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown
> Source)
> [custom methods]
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.