StaleDataException

Bug #976174 reported by pjv
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Collectionista
Fix Released
Medium
Unassigned

Bug Description

Sheet music extension. After adding a score manually and returning to ViewWindow.

04-07 21:59:04.139: E/AndroidRuntime(22504): FATAL EXCEPTION: main
04-07 21:59:04.139: E/AndroidRuntime(22504): java.lang.RuntimeException: Unable to resume activity {net.lp.collectionista.ext.sheet_music/net.lp.collectionista.ui.activities.collections.sheet_music.SheetMusicCollectionViewWindow}: android.database.StaleDataException: Attempted to access a cursor after it has been closed.
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2443)
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2471)
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1172)
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.os.Handler.dispatchMessage(Handler.java:99)
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.os.Looper.loop(Looper.java:137)
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.app.ActivityThread.main(ActivityThread.java:4340)
04-07 21:59:04.139: E/AndroidRuntime(22504): at java.lang.reflect.Method.invokeNative(Native Method)
04-07 21:59:04.139: E/AndroidRuntime(22504): at java.lang.reflect.Method.invoke(Method.java:511)
04-07 21:59:04.139: E/AndroidRuntime(22504): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-07 21:59:04.139: E/AndroidRuntime(22504): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-07 21:59:04.139: E/AndroidRuntime(22504): at dalvik.system.NativeStart.main(Native Method)
04-07 21:59:04.139: E/AndroidRuntime(22504): Caused by: android.database.StaleDataException: Attempted to access a cursor after it has been closed.
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed(BulkCursorToCursorAdaptor.java:75)
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.database.BulkCursorToCursorAdaptor.requery(BulkCursorToCursorAdaptor.java:144)
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.database.CursorWrapper.requery(CursorWrapper.java:182)
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.app.Activity.performRestart(Activity.java:4505)
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.app.Activity.performResume(Activity.java:4531)
04-07 21:59:04.139: E/AndroidRuntime(22504): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2433)
04-07 21:59:04.139: E/AndroidRuntime(22504): ... 10 more
04-07 21:59:04.155: W/ActivityManager(198): Force finishing activity net.lp.collectionista.ext.sheet_music/net.lp.collectionista.ui.activities.collections.sheet_music.SheetMusicCollectionViewWindow

pjv (pjv)
Changed in collectionista:
importance: Undecided → Low
Revision history for this message
pjv (pjv) wrote :
Download full text (3.2 KiB)

Going back from ItemSearchAddWindow for SME for second time.

04-22 22:51:00.620: I/ActivityManager(191): Displayed net.lp.collectionista.ext.sheet_music/net.lp.collectionista.ui.activities.items.sheet.music.MusicSheetItemSearchAddWindow: +257ms
04-22 22:51:02.666: D/dalvikvm(191): GC_FOR_ALLOC freed 1833K, 34% free 30620K/46087K, paused 139ms
04-22 22:51:02.713: D/AndroidRuntime(16185): Shutting down VM
04-22 22:51:02.713: W/dalvikvm(16185): threadid=1: thread exiting with uncaught exception (group=0x40a691f8)
04-22 22:51:02.721: E/AndroidRuntime(16185): FATAL EXCEPTION: main
04-22 22:51:02.721: E/AndroidRuntime(16185): java.lang.RuntimeException: Unable to resume activity {net.lp.collectionista.ext.sheet_music/net.lp.collectionista.ui.activities.collections.sheet_music.SheetMusicCollectionViewWindow}: android.database.StaleDataException: Attempted to access a cursor after it has been closed.
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2444)
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472)
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1173)
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.os.Handler.dispatchMessage(Handler.java:99)
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.os.Looper.loop(Looper.java:137)
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.app.ActivityThread.main(ActivityThread.java:4424)
04-22 22:51:02.721: E/AndroidRuntime(16185): at java.lang.reflect.Method.invokeNative(Native Method)
04-22 22:51:02.721: E/AndroidRuntime(16185): at java.lang.reflect.Method.invoke(Method.java:511)
04-22 22:51:02.721: E/AndroidRuntime(16185): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-22 22:51:02.721: E/AndroidRuntime(16185): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-22 22:51:02.721: E/AndroidRuntime(16185): at dalvik.system.NativeStart.main(Native Method)
04-22 22:51:02.721: E/AndroidRuntime(16185): Caused by: android.database.StaleDataException: Attempted to access a cursor after it has been closed.
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed(BulkCursorToCursorAdaptor.java:75)
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.database.BulkCursorToCursorAdaptor.requery(BulkCursorToCursorAdaptor.java:144)
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.database.CursorWrapper.requery(CursorWrapper.java:186)
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.app.Activity.performRestart(Activity.java:4505)
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.app.Activity.performResume(Activity.java:4531)
04-22 22:51:02.721: E/AndroidRuntime(16185): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434)
04-22 22:51:02.721: E/AndroidRuntime(16185): ... 10 more
04-22 22:51:02.729: W/ActivityManager(191): Force finishing activity net.lp.collectionista.ext.sheet_music/net.lp.collectionista.ui.activities.collections.shee...

Read more...

Changed in collectionista:
importance: Low → Medium
Revision history for this message
pjv (pjv) wrote :

Only on ICS

Revision history for this message
pjv (pjv) wrote :

In ItemAddUIAction I was doing a managedQuery and the closed the cursor. But the context was the CollectionViewWindow.

I don't understand why I only saw it on ICS (versus Gingerbread), and I think also only with MusicSheets. So I was expecting CrossProcessCursor stuff or so.

Perhaps on ICS that managed query is somehow recycled with the managed query for the grid in CollectionViewWindow and then all the cursors are closed. Or cursors are more aggressively closed in ICS when they are managed by the Activity.

I should just use a regular (unmanaged) query everywhere in any Action.

Took me a long time finding. Easiest way was to put Log.w("CURSORCLOSED", "Cursor closed by:", new RuntimeException("Stack trace")); near every "ursor.close(". This gives a stacktrace. I then disabled the closes for the stacktraces I saw last in the log before the real exception.

Changed in collectionista:
status: New → Fix Committed
Revision history for this message
pjv (pjv) wrote :

I think I only saw it with MusicSheets because they don't use PickItemTypeWindow silently, which is a lot robuster.

pjv (pjv)
Changed in collectionista:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.