? org/postgresql/core/v3/.QueryExecutorImpl.java.swp ? org/postgresql/core/v3/.SimpleQuery.java.swp Index: org/postgresql/core/v3/QueryExecutorImpl.java =================================================================== RCS file: /usr/local/cvsroot/pgjdbc/pgjdbc/org/postgresql/core/v3/QueryExecutorImpl.java,v retrieving revision 1.27 diff -c -r1.27 QueryExecutorImpl.java *** org/postgresql/core/v3/QueryExecutorImpl.java 30 Jan 2006 20:12:06 -0000 1.27 --- org/postgresql/core/v3/QueryExecutorImpl.java 4 Apr 2006 22:34:10 -0000 *************** *** 682,687 **** --- 682,688 ---- // Clean up any existing statement, as we can't use it. query.unprepare(); + processDeadParsedQueries(); String statementName = null; if (!oneShot) *************** *** 768,774 **** for (int i = 1; i <= params.getParameterCount(); ++i) pgStream.SendInteger4(params.getTypeOID(i)); ! pendingParseQueue.add(query); } private void sendBind(SimpleQuery query, SimpleParameterList params, Portal portal) throws IOException { --- 769,775 ---- for (int i = 1; i <= params.getParameterCount(); ++i) pgStream.SendInteger4(params.getTypeOID(i)); ! pendingParseQueue.add(new Object[]{query, query.getStatementName()}); } private void sendBind(SimpleQuery query, SimpleParameterList params, Portal portal) throws IOException { *************** *** 1085,1092 **** private final HashMap parsedQueryMap = new HashMap(); private final ReferenceQueue parsedQueryCleanupQueue = new ReferenceQueue(); ! private void registerParsedQuery(SimpleQuery query) { ! String statementName = query.getStatementName(); if (statementName == null) return ; --- 1086,1092 ---- private final HashMap parsedQueryMap = new HashMap(); private final ReferenceQueue parsedQueryCleanupQueue = new ReferenceQueue(); ! private void registerParsedQuery(SimpleQuery query, String statementName) { if (statementName == null) return ; *************** *** 1171,1181 **** case '1': // Parse Complete (response to Parse) pgStream.ReceiveIntegerR(4); // len, discarded ! SimpleQuery parsedQuery = (SimpleQuery)pendingParseQueue.get(parseIndex++); if (logger.logDebug()) ! logger.debug(" <=BE ParseComplete [" + parsedQuery.getStatementName() + "]"); ! registerParsedQuery(parsedQuery); break; case 't': // ParameterDescription --- 1171,1185 ---- case '1': // Parse Complete (response to Parse) pgStream.ReceiveIntegerR(4); // len, discarded ! Object[] parsedQueryAndStatement = (Object[])pendingParseQueue.get(parseIndex++); ! ! SimpleQuery parsedQuery = (SimpleQuery)parsedQueryAndStatement[0]; ! String parsedStatementName = (String)parsedQueryAndStatement[1]; ! if (logger.logDebug()) ! logger.debug(" <=BE ParseComplete [" + parsedStatementName + "]"); ! registerParsedQuery(parsedQuery, parsedStatementName); break; case 't': // ParameterDescription *************** *** 1368,1374 **** // Reset the statement name of Parses that failed. while (parseIndex < pendingParseQueue.size()) { ! SimpleQuery failedQuery = (SimpleQuery)pendingParseQueue.get(parseIndex++); failedQuery.unprepare(); } --- 1372,1379 ---- // Reset the statement name of Parses that failed. while (parseIndex < pendingParseQueue.size()) { ! Object[] failedQueryAndStatement = (Object[])pendingParseQueue.get(parseIndex++); ! SimpleQuery failedQuery = (SimpleQuery)failedQueryAndStatement[0]; failedQuery.unprepare(); } Index: org/postgresql/core/v3/SimpleQuery.java =================================================================== RCS file: /usr/local/cvsroot/pgjdbc/pgjdbc/org/postgresql/core/v3/SimpleQuery.java,v retrieving revision 1.9 diff -c -r1.9 SimpleQuery.java *** org/postgresql/core/v3/SimpleQuery.java 4 Jul 2005 18:50:29 -0000 1.9 --- org/postgresql/core/v3/SimpleQuery.java 4 Apr 2006 22:34:10 -0000 *************** *** 102,107 **** --- 102,111 ---- } void setCleanupRef(PhantomReference cleanupRef) { + if (this.cleanupRef != null) { + this.cleanupRef.clear(); + this.cleanupRef.enqueue(); + } this.cleanupRef = cleanupRef; }