diff options
author | Vasu Nori <vnori@google.com> | 2009-12-07 18:38:11 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-12-07 18:38:11 -0800 |
commit | c65708ef6edcc76138485095cf9c6cbe48b2bf1c (patch) | |
tree | 2b2822d6795ee4fcad966934e0fface465eb56ee | |
parent | 1588bedcd042ea77d232b9b7853235e8834f2215 (diff) | |
parent | 976ed43786dcf078a0f802716d49644691656a24 (diff) | |
download | frameworks_base-c65708ef6edcc76138485095cf9c6cbe48b2bf1c.zip frameworks_base-c65708ef6edcc76138485095cf9c6cbe48b2bf1c.tar.gz frameworks_base-c65708ef6edcc76138485095cf9c6cbe48b2bf1c.tar.bz2 |
am 976ed437: am 6be01bf2: Merge change Ifa1fae13 into eclair-mr2
Merge commit '976ed43786dcf078a0f802716d49644691656a24'
* commit '976ed43786dcf078a0f802716d49644691656a24':
Revert "dealloc compiled-sql statements before deref'ing them from SQLiteDatabase obj."
-rw-r--r-- | core/java/android/database/sqlite/SQLiteDatabase.java | 28 | ||||
-rw-r--r-- | core/java/android/database/sqlite/SQLiteProgram.java | 2 |
2 files changed, 12 insertions, 18 deletions
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java index d9003a3..657bbcc 100644 --- a/core/java/android/database/sqlite/SQLiteDatabase.java +++ b/core/java/android/database/sqlite/SQLiteDatabase.java @@ -827,15 +827,6 @@ public class SQLiteDatabase extends SQLiteClosable { } private void closeClosable() { - /* deallocate all compiled sql statement objects in compiledQueries cache. - * this should be done before de-referencing all {@link SQLiteClosable} objects - * from this database object because calling - * {@link SQLiteClosable#onAllReferencesReleasedFromContainer()} could cause the database - * to be closed. sqlite doesn't let a database close if there are - * any unfinalized statements - such as the compiled-sql objects in mCompiledQueries. - */ - resetCompiledSqlCache(); - Iterator<Map.Entry<SQLiteClosable, Object>> iter = mPrograms.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<SQLiteClosable, Object> entry = iter.next(); @@ -844,6 +835,13 @@ public class SQLiteDatabase extends SQLiteClosable { program.onAllReferencesReleasedFromContainer(); } } + + // finalize all compiled sql statement objects in compiledQueries cache + synchronized (mCompiledQueries) { + for (SQLiteCompiledSql compiledStatement : mCompiledQueries.values()) { + compiledStatement.releaseSqlStatement(); + } + } } /** @@ -1791,9 +1789,7 @@ public class SQLiteDatabase extends SQLiteClosable { */ public void setMaxSqlCacheSize(int cacheSize) { synchronized(mCompiledQueries) { - if (mMaxSqlCacheSize > 0) { - resetCompiledSqlCache(); - } + resetCompiledSqlCache(); mMaxSqlCacheSize = (cacheSize > MAX_SQL_CACHE_SIZE) ? MAX_SQL_CACHE_SIZE : (cacheSize < 0) ? 0 : cacheSize; } @@ -1804,9 +1800,6 @@ public class SQLiteDatabase extends SQLiteClosable { */ public void resetCompiledSqlCache() { synchronized(mCompiledQueries) { - for (SQLiteCompiledSql compiledStatement : mCompiledQueries.values()) { - compiledStatement.releaseSqlStatement(); - } mCompiledQueries.clear(); } } @@ -1842,7 +1835,7 @@ public class SQLiteDatabase extends SQLiteClosable { /* reached max cachesize. before adding new entry, remove an entry from the * cache. we don't want to wipe out the entire cache because of this: * GCing {@link SQLiteCompiledSql} requires call to sqlite3_finalize - * JNI method. If entire cache is wiped out, it could cause a big GC activity + * JNI method. If entire cache is wiped out, it could be cause a big GC activity * just because a (rogue) process is using the cache incorrectly. */ Set<String> keySet = mCompiledQueries.keySet(); @@ -1851,7 +1844,8 @@ public class SQLiteDatabase extends SQLiteClosable { break; } } - mCompiledQueries.put(sql, compiledStatement); + compiledSql = new SQLiteCompiledSql(this, sql); + mCompiledQueries.put(sql, compiledSql); } if (SQLiteDebug.DEBUG_SQL_CACHE) { Log.v(TAG, "|adding_sql_to_cache|" + getPath() + "|" + mCompiledQueries.size() + "|" + diff --git a/core/java/android/database/sqlite/SQLiteProgram.java b/core/java/android/database/sqlite/SQLiteProgram.java index 5ee2f1e..edc15cb 100644 --- a/core/java/android/database/sqlite/SQLiteProgram.java +++ b/core/java/android/database/sqlite/SQLiteProgram.java @@ -100,7 +100,7 @@ public abstract class SQLiteProgram extends SQLiteClosable { * @return a unique identifier for this program */ public final int getUniqueId() { - return (compiledSql != null) ? compiledSql.nStatement : 0; + return compiledSql.nStatement; } /* package */ String getSqlString() { |