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 ka...@apache.org on 2007/07/04 13:07:56 UTC
svn commit: r553171 - in
/db/derby/code/branches/10.3/java/engine/org/apache/derby:
iapi/sql/conn/LanguageConnectionContext.java
impl/sql/GenericPreparedStatement.java
impl/sql/conn/GenericLanguageConnectionContext.java
Author: kahatlen
Date: Wed Jul 4 04:07:55 2007
New Revision: 553171
URL: http://svn.apache.org/viewvc?view=rev&rev=553171
Log:
DERBY-2689: Deadlock with GenericPreparedStatement
Merged fix from trunk (revision 553101).
Modified:
db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java
db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java
db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java
Modified: db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java?view=diff&rev=553171&r1=553170&r2=553171
==============================================================================
--- db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java (original)
+++ db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/conn/LanguageConnectionContext.java Wed Jul 4 04:07:55 2007
@@ -1053,4 +1053,9 @@
* @return True if SQL standard permissions are being used
*/
public boolean usesSqlAuthorization();
+
+ /**
+ * Close any unused activations in this connection context.
+ */
+ public void closeUnusedActivations() throws StandardException;
}
Modified: db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java?view=diff&rev=553171&r1=553170&r2=553171
==============================================================================
--- db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java (original)
+++ db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java Wed Jul 4 04:07:55 2007
@@ -218,18 +218,27 @@
*
* @exception StandardException thrown if finished.
*/
- public synchronized Activation getActivation(LanguageConnectionContext lcc, boolean scrollable) throws StandardException
+ public Activation getActivation(LanguageConnectionContext lcc,
+ boolean scrollable)
+ throws StandardException
{
- GeneratedClass gc = getActivationClass();
+ Activation ac;
+ synchronized (this) {
+ GeneratedClass gc = getActivationClass();
- if (gc == null) {
- rePrepare(lcc);
- gc = getActivationClass();
- }
+ if (gc == null) {
+ rePrepare(lcc);
+ gc = getActivationClass();
+ }
- Activation ac = new GenericActivationHolder(lcc, gc, this, scrollable);
+ ac = new GenericActivationHolder(lcc, gc, this, scrollable);
- inUseCount++;
+ inUseCount++;
+ }
+ // DERBY-2689. Close unused activations-- this method should be called
+ // when I'm not holding a lock on a prepared statement to avoid
+ // deadlock.
+ lcc.closeUnusedActivations();
return ac;
}
Modified: db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java?view=diff&rev=553171&r1=553170&r2=553171
==============================================================================
--- db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java (original)
+++ db/derby/code/branches/10.3/java/engine/org/apache/derby/impl/sql/conn/GenericLanguageConnectionContext.java Wed Jul 4 04:07:55 2007
@@ -414,7 +414,11 @@
if (acts.size() > maxActsSize) {
maxActsSize = acts.size();
}
+ }
+ public void closeUnusedActivations()
+ throws StandardException
+ {
// DERBY-418. Activations which are marked unused,
// are closed here. Activations Vector is iterated
// to identify and close unused activations, only if
@@ -422,6 +426,7 @@
// size exceeds 20.
if( (unusedActs) && (acts.size() > 20) ) {
unusedActs = false;
+
for (int i = acts.size() - 1; i >= 0; i--) {
// it maybe the case that a Activation's reset() ends up