Overview
Artifact ID: | f5aaef6ef9c905dbbf20e2583ec4bcb2491fcd0e |
---|---|
Ticket: | 8d03600d81328b53c0505672313bebf61944d3b0
suspected bug introduced in jni/android_database_SQLiteConnection.cpp |
User & Date: | anonymous 2014-06-11 19:48:52 |
Changes
- foundin changed to: "trunk"
- icomment:
Hi, We've built and deployed this in an APK successfully, but the JNI code has a memory leak. We are using cursor.moveToNext() with row results of a few hundred and we quickly run into the following crash (because Android detects when more than 500-or so dangling memory references are still being held. I suspect the following commit is the culprit, since it specifically references changes to nativeExecuteForCursorWindow(), which is listed in the below stack trace from Android. [365586dcaf] Replace nativeExecuteForCursorWindow() with an implementation that builds with the NDK. Seems to work, but is not yet tested. Exception handling is almost certainly still wrong. http://www.sqlite.org/android/info/365586dcafe43f880021b0de52b6a19f02fc6ee1 Would appreciate any comments you can provide. =) E/dalvikvm( 8184): JNI ERROR (app bug): local reference table overflow (max=512) W/dalvikvm( 8184): JNI local reference table (0x6287a000) dump: W/dalvikvm( 8184): Last 10 entries (of 512): W/dalvikvm( 8184): 511: 0x4198db00 java.lang.Class W/dalvikvm( 8184): 510: 0x4243ccb0 java.lang.String "4704-6055f85cb8e... (37 chars) W/dalvikvm( 8184): 509: 0x4243cc30 java.lang.String "4705-4257136a352... (37 chars) W/dalvikvm( 8184): 508: 0x4243cbb0 java.lang.String "4706-10b6c6e3309... (37 chars) W/dalvikvm( 8184): 507: 0x4243cb30 java.lang.String "4707-cf8761aaaa2... (37 chars) W/dalvikvm( 8184): 506: 0x42435568 java.lang.String "4708-0eb255040b3... (37 chars) W/dalvikvm( 8184): 505: 0x424354e8 java.lang.String "4709-5ab35850687... (37 chars) W/dalvikvm( 8184): 504: 0x42435468 java.lang.String "4710-30c02305ef4... (37 chars) W/dalvikvm( 8184): 503: 0x424353e8 java.lang.String "4711-aaeb683b34f... (37 chars) W/dalvikvm( 8184): 502: 0x42435368 java.lang.String "4712-8568ce06955... (37 chars) W/dalvikvm( 8184): Summary: W/dalvikvm( 8184): 3 of java.lang.Class (2 unique instances) W/dalvikvm( 8184): 508 of java.lang.String (508 unique instances) W/dalvikvm( 8184): 1 of android.database.CursorWindow E/dalvikvm( 8184): Failed adding to JNI local ref table (has 512 entries) I/dalvikvm( 8184): "pool-1-thread-1" prio=5 tid=18 RUNNABLE I/dalvikvm( 8184): | group="main" sCount=0 dsCount=0 obj=0x42606278 self=0x5b05c1c8 I/dalvikvm( 8184): | sysTid=8234 nice=0 sched=0/0 cgrp=apps handle=1636460376 I/dalvikvm( 8184): | state=R schedstat=( 0 0 0 ) utm=3605 stm=454 core=1 I/dalvikvm( 8184): at android.database.CursorWindow.nativePutString(Native Method) I/dalvikvm( 8184): at android.database.CursorWindow.putString(CursorWindow.java:625) I/dalvikvm( 8184): at org.sqlite.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow(Native Method) I/dalvikvm( 8184): at org.sqlite.database.sqlite.SQLiteConnection.executeForCursorWindow(SQLiteConnection.java:861) I/dalvikvm( 8184): at org.sqlite.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:840) I/dalvikvm( 8184): at org.sqlite.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:66) I/dalvikvm( 8184): at org.sqlite.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:169) I/dalvikvm( 8184): at org.sqlite.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:139) I/dalvikvm( 8184): at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:197) I/dalvikvm( 8184): at android.database.AbstractCursor.moveToNext(AbstractCursor.java:245) I/dalvikvm( 8184): at com.couchbase.lite.android.AndroidSQLiteStorageEngine$SQLiteCursorWrapper.moveToNext(AndroidSQLiteStorageEngine.java:179) Thank you! - Michael R. Hines
- login: "anonymous"
- mimetype: "text/x-fossil-plain"
- private_contact changed to: "dac3f96332ee59f80a2b5b89bced3710de192e2b"
- severity changed to: "Critical"
- status changed to: "Open"
- title changed to:
suspected bug introduced in jni/android_database_SQLiteConnection.cpp
- type changed to: "Code_Defect"