sqlite crashes when closing the database

A change was made in the last CL to ask sqlite for all unfinalized statements
and then finalizing them before closing the database.
But this crashes sqlite! because sqlite's FTS3
module keeps some prepared statements around and they should not
be finalized before closing the database.
(when sqlite is asked for all unfianlized statements, it also returns
the FTS3's reserved prepared statements which should not be
finalized!!)

Change-Id: I141ab4563985b8cd1305a1228c4cb01bc7281bcb
This commit is contained in:
Vasu Nori
2010-05-21 15:36:06 -07:00
parent 3f21110a80
commit fea6f6dcb7
2 changed files with 2 additions and 5 deletions

View File

@@ -926,6 +926,8 @@ public class SQLiteDatabase extends SQLiteClosable {
lock();
try {
closeClosable();
// finalize ALL statements queued up so far
closePendingStatements();
// close this database instance - regardless of its reference count value
onAllReferencesReleased();
} finally {

View File

@@ -215,7 +215,6 @@ static void enableSqlProfiling(JNIEnv* env, jobject object, jstring databaseName
static void dbclose(JNIEnv* env, jobject object)
{
sqlite3 * handle = (sqlite3 *)env->GetIntField(object, offset_db_handle);
sqlite3_stmt * pStmt;
if (handle != NULL) {
// release the memory associated with the traceFuncArg in enableSqlTracing function
@@ -228,10 +227,6 @@ static void dbclose(JNIEnv* env, jobject object)
if (traceFuncArg != NULL) {
free(traceFuncArg);
}
// finalize all statements on this handle
while ((pStmt = sqlite3_next_stmt(handle, 0)) != 0 ) {
sqlite3_finalize(pStmt);
}
LOGV("Closing database: handle=%p\n", handle);
int result = sqlite3_close(handle);
if (result == SQLITE_OK) {