We are seeing a crash from time to time from Android's ART code. We are indexing into an int array without bounds checking and then catching Java's ArrayIndexOutOfBoundsException and handling that correctly.
We run this code on numerous PCs with various versions of Java and it works correctly. However, on Android the code occasionally explodes.
Some of our source code:
class IdToIndexData {
private final int tmap[]; // Contents are set elsewhere
int getTraitsIndexUnchecked(int id) {
return tmap[id];
}
}
class DataObjectInfo {
public Integer getFieldTraits(Class1 map, int id) {
int traitsIndex=map.getTraitsIndexUnchecked(id);
return traitsIndex;
} catch (ArrayIndexOutOfBoundsException e) {
return null;
}
}
}
I was unable to create a simple test case as I expect some sort of multi-threading race condition in the Android ART library.
The "I/ObjectDBSet: changesComplete" are from a different thread (see "Message Processor" thread), but could touch one of the objects calling getFieldTraits(). The int tmp[] is final, so would not be changed. Also, the DataObjectInfo and IdToIndexData objects would not be replaced or altered.
Either way, another thread should not cause a crash from Android's ART library.
Android Version/Device:
Samsung Galaxy Tab A with Android 7.0 build number NRD90M.T580UEU2BQL1.
From Android Studio:
Build: 3.1.4, AI-173.4907809, 201807232114,
AI-173.4907809, JRE 1.8.0_152-release-1024-b01x64 JetBrains s.r.o, OS Linux(amd64) v4.15.0-34-generic unknown, screens 1920x1080, 2560x1600
Android Gradle Plugin: 3.1.4 Gradle: 4.4 NDK: from local.properties: (not specified); latest from SDK: (not found); LLDB: pinned revision 3.1 not found; latest from SDK: (package not found); CMake: from local.properties: (not specified); latest from SDK: (not found); from PATH: (not found);
Full output from the crash:
A/art: art/runtime/stack.cc:205] Check failed: success Failed to read the this object in int com.hcs.orc.datatype.IdToIndexData.getTraitsIndexUnchecked(int)
I/ObjectDBSet: changesComplete
I/ObjectDBSet: changesComplete
I/ObjectDBSet: changesComplete
I/ObjectDBSet: changesComplete
I/ObjectDBSet: changesComplete
I/ObjectDBSet: changesComplete
I/ObjectDBSet: changesComplete
I/ObjectDBSet: changesComplete
I/ObjectDBSet: changesComplete
A/art: art/runtime/runtime.cc:419] Runtime aborting...
art/runtime/runtime.cc:419] Aborting thread:
art/runtime/runtime.cc:419] "main" prio=5 tid=1 Runnable
art/runtime/runtime.cc:419] | group="" sCount=0 dsCount=0 obj=0x7546a770 self=0xe4a85400
art/runtime/runtime.cc:419] | sysTid=10759 nice=0 cgrp=default sched=0/0 handle=0xe7cf0534
art/runtime/runtime.cc:419] | state=R schedstat=( 0 0 0 ) utm=1113 stm=15 core=1 HZ=100
art/runtime/runtime.cc:419] | stack=0xff5be000-0xff5c0000 stackSize=8MB
art/runtime/runtime.cc:419] | held mutexes= "abort lock" "mutator lock"(shared held)
art/runtime/runtime.cc:419] native: #00 pc 00351ce9 /system/lib/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+128)
art/runtime/runtime.cc:419] native: #01 pc 00332205 /system/lib/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEbP12BacktraceMap+304)
A/art: art/runtime/runtime.cc:419] native: #02 pc 003251b1 /system/lib/libart.so (_ZNK3art10AbortState10DumpThreadERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEPNS_6ThreadE+24)
art/runtime/runtime.cc:419] native: #03 pc 00324ffb /system/lib/libart.so (_ZNK3art10AbortState4DumpERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEE+362)
art/runtime/runtime.cc:419] native: #04 pc 0031bdc7 /system/lib/libart.so (_ZN3art7Runtime5AbortEv+90)
art/runtime/runtime.cc:419] native: #05 pc 000b4dcb /system/lib/libart.so (_ZN3art10LogMessageD2Ev+866)
art/runtime/runtime.cc:419] native: #06 pc 00328df5 /system/lib/libart.so (_ZNK3art12StackVisitor13GetThisObjectEv+488)
art/runtime/runtime.cc:419] native: #07 pc 00125457 /system/lib/libart.so (_ZN3art19CatchLocationFinder10VisitFrameEv+50)
art/runtime/runtime.cc:419] native: #08 pc 00329d71 /system/lib/libart.so (_ZN3art12StackVisitor9WalkStackEb+440)
art/runtime/runtime.cc:419] native: #09 pc 0011b18d /system/lib/libart.so (_ZN3art3Dbg13PostExceptionEPNS_6mirror9ThrowableE+108)
art/runtime/runtime.cc:419] native: #10 pc 001c0bb1 /system/lib/libart.so (_ZNK3art15instrumentation15Instrumentation20ExceptionCaughtEventEPNS_6ThreadEPNS_6mirror9ThrowableE+48)
art/runtime/runtime.cc:419] native: #11 pc 0033944d /system/lib/libart.so (_ZN3art6Thread21QuickDeliverExceptionEv+504)
art/runtime/runtime.cc:419] native: #12 pc 003f67f9 /system/lib/libart.so (artThrowArrayBoundsFromCode+10)
art/runtime/runtime.cc:419] native: #13 pc 0002bab7 /dev/ashmem/dalvik-jit-code-cache_10759_10759 (deleted) (Java_com_hcs_orc_datatype_IdToIndexData_getTraitsIndexUnchecked__I+38)
art/runtime/runtime.cc:419] at com.hcs.orc.datatype.IdToIndexData.getTraitsIndexUnchecked(IdToIndexData.java:81)
art/runtime/runtime.cc:419] at com.hcs.orc.datatype.DataObjectInfo.getFieldTraits(DataObjectInfo.java:202)
art/runtime/runtime.cc:419] at com.hcs.orc.datatype.DataObjectBase.getTraits(DataObjectBase.java:114)
art/runtime/runtime.cc:419] at com.hcs.orc.table.config.OutputProfileBase.formatLine(OutputProfileBase.java:141)
art/runtime/runtime.cc:419] at com.hcs.android.orpanel.fragments.FutureProcedureFragment.lambda$updateView$0$FutureProcedureFragment(FutureProcedureFragment.java:174)
art/runtime/runtime.cc:419] at com.hcs.android.orpanel.fragments.FutureProcedureFragment$$Lambda$0.run(unavailable:-1)
art/runtime/runtime.cc:419] at android.os.Handler.handleCallback(Handler.java:751)
art/runtime/runtime.cc:419] at android.os.Handler.dispatchMessage(Handler.java:95)
art/runtime/runtime.cc:419] at android.os.Looper.loop(Looper.java:154)
art/runtime/runtime.cc:419] at android.app.ActivityThread.main(ActivityThread.java:6776)
art/runtime/runtime.cc:419] at java.lang.reflect.Method.invoke!(Native method)
art/runtime/runtime.cc:419] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
art/runtime/runtime.cc:419] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
art/runtime/runtime.cc:419] Dumping all threads without appropriate locks held: thread list lock
art/runtime/runtime.cc:419] All threads:
art/runtime/runtime.cc:419] DALVIK THREADS (29):
art/runtime/runtime.cc:419] "main" prio=5 tid=1 Runnable
art/runtime/runtime.cc:419] | group="" sCount=0 dsCount=0 obj=0x7546a770 self=0xe4a85400
art/runtime/runtime.cc:419] | sysTid=10759 nice=0 cgrp=default sched=0/0 handle=0xe7cf0534
art/runtime/runtime.cc:419] | state=R schedstat=( 0 0 0 ) utm=1115 stm=17 core=3 HZ=100
art/runtime/runtime.cc:419] | stack=0xff5be000-0xff5c0000 stackSize=8MB
art/runtime/runtime.cc:419] | held mutexes= "abort lock" "mutator lock"(shared held)
art/runtime/runtime.cc:419] native: #00 pc 00351ce9 /system/lib/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+128)
art/runtime/runtime.cc:419] native: #01 pc 00332205 /system/lib/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEbP12BacktraceMap+304)
art/runtime/runtime.cc:419] native: #02 pc 00344357 /system/lib/libart.so (_ZN3art14DumpCheckpoint3RunEPNS_6ThreadE+622)
art/runtime/runtime.cc:419] native: #03 pc 0033e0e1 /system/lib/libart.so (_ZN3art10ThreadList13RunCheckpointEPNS_7ClosureE+336)
art/runtime/runtime.cc:419] native: #04 pc 0033de01 /system/lib/libart.so (_ZN3art10ThreadList4DumpERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEb+180)
art/runtime/runtime.cc:419] native: #05 pc 00325005 /system/lib/libart.so (_ZNK3art10AbortState4DumpERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEE+372)
art/runtime/runtime.cc:419] native: #06 pc 0031bdc7 /system/lib/libart.so (_ZN3art7Runtime5AbortEv+90)
art/runtime/runtime.cc:419] native: #07 pc 000b4dcb /system/lib/libart.so (_ZN3art10LogMessageD2Ev+866)
art/runtime/runtime.cc:419] native: #08 pc 00328df5 /system/lib/libart.so (_ZNK3art12StackVisitor13GetThisObjectEv+488)
art/runtime/runtime.cc:419] native: #09 pc 00125457 /system/lib/libart.so (_ZN3art19CatchLocationFinder10VisitFrameEv+50)
art/runtime/runtime.cc:419] native: #10 pc 00329d71 /system/lib/libart.so (_ZN3art12StackVisitor9WalkStackEb+440)
art/runtime/runtime.cc:419] native: #11 pc 0011b18d /system/lib/libart.so (_ZN3art3Dbg13PostExceptionEPNS_6mirror9ThrowableE+108)
art/runtime/runtime.cc:419] native: #12 pc 001c0bb1 /system/lib/libart.so (_ZNK3art15instrumentation15Instrumentation20ExceptionCaughtEventEPNS_6ThreadEPNS_6mirror9ThrowableE+48)
art/runtime/runtime.cc:419] native: #13 pc 0033944d /system/lib/libart.so (_ZN3art6Thread21QuickDeliverExceptionEv+504)
art/runtime/runtime.cc:419] native: #14 pc 003f67f9 /system/lib/libart.so (artThrowArrayBoundsFromCode+10)
art/runtime/runtime.cc:419] native: #15 pc 0002bab7 /dev/ashmem/dalvik-jit-code-cache_10759_10759 (deleted) (Java_com_hcs_orc_datatype_IdToIndexData_getTraitsIndexUnchecked__I+38)
art/runtime/runtime.cc:419] at com.hcs.orc.datatype.IdToIndexData.getTraitsIndexUnchecked(IdToIndexData.java:81)
art/runtime/runtime.cc:419] at com.hcs.orc.datatype.DataObjectInfo.getFieldTraits(DataObjectInfo.java:202)
art/runtime/runtime.cc:419] at com.hcs.orc.datatype.DataObjectBase.getTraits(DataObjectBase.java:114)
art/runtime/runtime.cc:419] at com.hcs.orc.table.config.OutputProfileBase.formatLine(OutputProfileBase.java:141)
art/runtime/runtime.cc:419] at com.hcs.android.orpanel.fragments.FutureProcedureFragment.lambda$updateView$0$FutureProcedureFragment(FutureProcedureFragment.java:174)
art/runtime/runtime.cc:419] at com.hcs.android.orpanel.fragments.FutureProcedureFragment$$Lambda$0.run(unavailable:-1)
art/runtime/runtime.cc:419] at android.os.Handler.handleCallback(Handler.java:751)
art/runtime/runtime.cc:419] at android.os.Handler.dispatchMessage(Handler.java:95)
art/runtime/runtime.cc:419] at android.os.Looper.loop(Looper.java:154)
art/runtime/runtime.cc:419] at android.app.ActivityThread.main(ActivityThread.java:6776)
art/runtime/runtime.cc:419] at java.lang.reflect.Method.invoke!(Native method)
art/runtime/runtime.cc:419] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
art/runtime/runtime.cc:419] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
art/runtime/runtime.cc:419]
art/runtime/runtime.cc:419] "Jit thread pool worker thread 0" prio=5 tid=2 Runnable (still starting up)
art/runtime/runtime.cc:419] | group="" sCount=0 dsCount=0 obj=0x0 self=0xdb843000
art/runtime/runtime.cc:419] | sysTid=10764 nice=9 cgrp=default sched=0/0 handle=0xe41a7920
art/runtime/runtime.cc:419] | state=R schedstat=( 0 0 0 ) utm=225 stm=25 core=0 HZ=100
art/runtime/runtime.cc:419] | stack=0xe40a9000-0xe40ab000 stackSize=1022KB
art/runtime/runtime.cc:419] | held mutexes= "mutator lock"(shared held)
art/runtime/runtime.cc:419] native: #00 pc 00351ce9 /system/lib/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+128)
art/runtime/runtime.cc:419] native: #01 pc 00332205 /system/lib/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEbP12BacktraceMap+304)
art/runtime/runtime.cc:419] native: #02 pc 00344357 /system/lib/libart.so (_ZN3art14DumpCheckpoint3RunEPNS_6ThreadE+622)
art/runtime/runtime.cc:419] native: #03 pc 00332d95 /system/lib/libart.so (_ZN3art6Thread21RunCheckpointFunctionEv+144)
art/runtime/runtime.cc:419] native: #04 pc 000f042d /system/lib/libart-compiler.so (???)
art/runtime/runtime.cc:419] native: #05 pc 00136655 /system/lib/libart-compiler.so (_ZN3art19HInstructionBuilder22BuildStaticFieldAccessERKNS_11InstructionEjb+2608)
art/runtime/runtime.cc:419] native: #06 pc 0012e5dd /system/lib/libart-compiler.so (_ZN3art19HInstructionBuilder21ProcessDexInstructionERKNS_11InstructionEj+580)
art/runtime/runtime.cc:419] native: #07 pc 0012de5d /system/lib/libart-compiler.so (_ZN3art19HInstructionBuilder5BuildEv+1176)
art/runtime/runtime.cc:419] native: #08 pc 00112c9d /system/lib/libart-compiler.so (_ZN3art13HGraphBuilder10BuildGraphEv+84)
art/runtime/runtime.cc:419] native: #09 pc 0015720b /system/lib/libart-compiler.so (_ZNK3art18OptimizingCompiler10TryCompileEPNS_14ArenaAllocatorEPNS_19CodeVectorAllocatorEPKNS_7DexFile8CodeItemEjNS_10InvokeTypeEtjP8_jobjectRKS5_NS_6HandleINS_6mirror8DexCacheEEEPNS_9ArtMethodEb+2454)
art/runtime/runtime.cc:419] native: #10 pc 00158e47 /system/lib/libart-compiler.so (_ZN3art18OptimizingCompiler10JitCompileEPNS_6ThreadEPNS_3jit12JitCodeCacheEPNS_9ArtMethodEb+330)
art/runtime/runtime.cc:419] native: #11 pc 00107f1f /system/lib/libart-compiler.so (_ZN3art3jit11JitCompiler13CompileMethodEPNS_6ThreadEPNS_9ArtMethodEb+194)
art/runtime/runtime.cc:419] native: #12 pc 002506a3 /system/lib/libart.so (_ZN3art3jit3Jit13CompileMethodEPNS_9ArtMethodEPNS_6ThreadEb+318)
art/runtime/runtime.cc:419] native: #13 pc 00251dc7 /system/lib/libart.so (_ZN3art3jit14JitCompileTask3RunEPNS_6ThreadE+430)
art/runtime/runtime.cc:419] native: #14 pc 003450c9 /system/lib/libart.so (_ZN3art16ThreadPoolWorker3RunEv+44)
art/runtime/runtime.cc:419] native: #15 pc 00344c01 /system/lib/libart.so (_ZN3art16ThreadPoolWorker8CallbackEPv+64)
art/runtime/runtime.cc:419] native: #16 pc 00047f93 /system/lib/libc.so (_ZL15__pthread_startPv+22)
art/runtime/runtime.cc:419] native: #17 pc 0001a161 /system/lib/libc.so (__start_thread+6)
art/runtime/runtime.cc:419] (no managed stack frames)
art/runtime/runtime.cc:419]
art/runtime/runtime.cc:419] "Signal Catcher" prio=5 tid=3 WaitingInMainSignalCatcherLoop
art/runtime/runtime.cc:419] | group="" sCount=1 dsCount=0 obj=0x12c44670 self=0xd9b98900
art/runtime/runtime.cc:419] | sysTid=10765 nice=0 cgrp=default sched=0/0 handle=0xe40a6920
art/runtime/runtime.cc:419] | state=S schedstat=( 0 0 0 ) utm=0 stm=0 core=1 HZ=100
A/art: art/runtime/runtime.cc:419] | stack=0xe3faa000-0xe3fac000 stackSize=1014KB
art/runtime/runtime.cc:419] | held mutexes=
art/runtime/runtime.cc:419] kernel: __switch_to+0x80/0x8c
art/runtime/runtime.cc:419] kernel: do_sigtimedwait+0xdc/0x1bc
art/runtime/runtime.cc:419] kernel: compat_SyS_rt_sigtimedwait+0x98/0xd8
art/runtime/runtime.cc:419] kernel: __sys_trace+0x48/0x4c
art/runtime/runtime.cc:419] native: #00 pc 00049780 /system/lib/libc.so (__rt_sigtimedwait+12)
art/runtime/runtime.cc:419] native: #01 pc 0001e933 /system/lib/libc.so (sigwait+34)
art/runtime/runtime.cc:419] native: #02 pc 003282df /system/lib/libart.so (_ZN3art9SignalSet4WaitEv+22)
art/runtime/runtime.cc:419] native: #03 pc 00327ed9 /system/lib/libart.so (_ZN3art13SignalCatcher13WaitForSignalEPNS_6ThreadERNS_9SignalSetE+168)
art/runtime/runtime.cc:419] native: #04 pc 00326b1b /system/lib/libart.so (_ZN3art13SignalCatcher3RunEPv+302)
art/runtime/runtime.cc:419] native: #05 pc 00047f93 /system/lib/libc.so (_ZL15__pthread_startPv+22)
art/runtime/runtime.cc:419] native: #06 pc 0001a161 /system/lib/libc.so (__start_thread+6)
art/runtime/runtime.cc:419] (no managed stack frames)
art/runtime/runtime.cc:419]
art/runtime/runtime.cc:419] "JDWP" prio=5 tid=4 WaitingInMainDebuggerLoop
art/runtime/runtime.cc:419] | group="" sCount=1 dsCount=0 obj=0x12c445e0 self=0xdb844400
art/runtime/runtime.cc:419] | sysTid=10766 nice=0 cgrp=default sched=0/0 handle=0xe3fa7920
art/runtime/runtime.cc:419] | state=S schedstat=( 0 0 0 ) utm=44 stm=15 core=0 HZ=100
art/runtime/runtime.cc:419] | stack=0xe3eab000-0xe3ead000 stackSize=1014KB
art/runtime/runtime.cc:419] | held mutexes=
art/runtime/runtime.cc:419] kernel: __switch_to+0x80/0x8c
art/runtime/runtime.cc:419] kernel: poll_schedule_timeout+0x40/0x68
art/runtime/runtime.cc:419] kernel: do_select+0x4bc/0x500
art/runtime/runtime.cc:419] kernel: compat_core_sys_select+0x158/0x20c
art/runtime/runtime.cc:419] kernel: compat_SyS_pselect6+0x174/0x210
art/runtime/runtime.cc:419] kernel: __sys_trace+0x48/0x4c
art/runtime/runtime.cc:419] native: #00 pc 00049658 /system/lib/libc.so (__pselect6+20)
art/runtime/runtime.cc:419] native: #01 pc 0001d539 /system/lib/libc.so (select+88)
art/runtime/runtime.cc:419] native: #02 pc 003fe093 /system/lib/libart.so (_ZN3art4JDWP12JdwpAdbState15ProcessIncomingEv+302)
art/runtime/runtime.cc:419] native: #03 pc 002497ef /system/lib/libart.so (_ZN3art4JDWP9JdwpState3RunEv+654)
art/runtime/runtime.cc:419] native: #04 pc 00248f8f /system/lib/libart.so (_ZN3art4JDWPL15StartJdwpThreadEPv+22)
art/runtime/runtime.cc:419] native: #05 pc 00047f93 /system/lib/libc.so (_ZL15__pthread_startPv+22)
art/runtime/runtime.cc:419] native: #06 pc 0001a161 /system/lib/libc.so (__start_thread+6)
art/runtime/runtime.cc:419] (no managed stack frames)
art/runtime/runtime.cc:419]
art/runtime/runtime.cc:419] "MessageProcessor" prio=5 tid=17 Runnable
art/runtime/runtime.cc:419] | group="" sCount=0 dsCount=0 obj=0x12ce11a0 self=0xde362d00
art/runtime/runtime.cc:419] | sysTid=11066 nice=0 cgrp=default sched=0/0 handle=0xc561e920
art/runtime/runtime.cc:419] | state=R schedstat=( 0 0 0 ) utm=388 stm=5 core=2 HZ=100
art/runtime/runtime.cc:419] | stack=0xc551c000-0xc551e000 stackSize=1038KB
art/runtime/runtime.cc:419] | held mutexes= "mutator lock"(shared held)
art/runtime/runtime.cc:419] native: #00 pc 00351ce9 /system/lib/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+128)
art/runtime/runtime.cc:419] native: #01 pc 00332205 /system/lib/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEbP12BacktraceMap+304)
art/runtime/runtime.cc:419] native: #02 pc 00344357 /system/lib/libart.so (_ZN3art14DumpCheckpoint3RunEPNS_6ThreadE+622)
art/runtime/runtime.cc:419] native: #03 pc 00332d95 /system/lib/libart.so (_ZN3art6Thread21RunCheckpointFunctionEv+144)
art/runtime/runtime.cc:419] native: #04 pc 0020dea3 /system/lib/libart.so (_ZN3art11interpreter17ExecuteSwitchImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_b+51530)
art/runtime/runtime.cc:419] native: #05 pc 001cbded /system/lib/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+368)
art/runtime/runtime.cc:419] native: #06 pc 001d084f /system/lib/libart.so (_ZN3art11interpreter33ArtInterpreterToInterpreterBridgeEPNS_6ThreadEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+114)
art/runtime/runtime.cc:419] native: #07 pc 001e7f67 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+450)
art/runtime/runtime.cc:419] native: #08 pc 001fff3d /system/lib/libart.so (_ZN3art11interpreterL20DoInvokeVirtualQuickILb0EEEbPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+304)
art/runtime/runtime.cc:419] native: #09 pc 002055db /system/lib/libart.so (_ZN3art11interpreter17ExecuteSwitchImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_b+16514)
art/runtime/runtime.cc:419] native: #10 pc 001cbded /system/lib/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+368)
art/runtime/runtime.cc:419] native: #11 pc 001d084f /system/lib/libart.so (_ZN3art11interpreter33ArtInterpreterToInterpreterBridgeEPNS_6ThreadEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+114)
art/runtime/runtime.cc:419] native: #12 pc 001e7f67 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+450)
art/runtime/runtime.cc:419] native: #13 pc 001fff3d /system/lib/libart.so (_ZN3art11interpreterL20DoInvokeVirtualQuickILb0EEEbPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+304)
art/runtime/runtime.cc:419] native: #14 pc 002055db /system/lib/libart.so (_ZN3art11interpreter17ExecuteSwitchImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_b+16514)
art/runtime/runtime.cc:419] native: #15 pc 001cbded /system/lib/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+368)
art/runtime/runtime.cc:419] native: #16 pc 001d084f /system/lib/libart.so (_ZN3art11interpreter33ArtInterpreterToInterpreterBridgeEPNS_6ThreadEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameEPNS_6JValueE+114)
art/runtime/runtime.cc:419] native: #17 pc 001e7f67 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+450)
art/runtime/runtime.cc:419] native: #18 pc 001fff3d /system/lib/libart.so (_ZN3art11interpreterL20DoInvokeVirtualQuickILb0EEEbPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+304)
art/runtime/runtime.cc:419] native: #19 pc 002055db /system/lib/libart.so (_ZN3art11interpreter17ExecuteSwitchImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_b+16514)
art/runtime/runtime.cc:419] native: #20 pc 001cbded /system/lib/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameENS_6JValueEb+368)
art/runtime/runtime.cc:419] native: #21 pc 001d07b9 /system/lib/libart.so (_ZN3art11interpreter30EnterInterpreterFromEntryPointEPNS_6ThreadEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameE+92)
art/runtime/runtime.cc:419] native: #22 pc 003f6dbd /system/lib/libart.so (artQuickToInterpreterBridge+716)
art/runtime/runtime.cc:419] native: #23 pc 000add93 /system/lib/libart.so (art_quick_to_interpreter_bridge+34)
art/runtime/runtime.cc:419] native: #24 pc 0001b4b1 /dev/ashmem/dalvik-jit-code-cache_10759_10759 (deleted) (???)
art/runtime/runtime.cc:419] at java.lang.Boolean.booleanValue(Boolean.java:132)
art/runtime/runtime.cc:419] at com.hcs.orc.data.Parameter.isFeatureSchedulingEnabled(Parameter.java:1349)
art/runtime/runtime.cc:419] at com.hcs.orc.datatype.logic.ProcedureLogic.isAppointmentRequest(ProcedureLogic.java:439)
art/runtime/runtime.cc:419] at com.hcs.android.orc.service.datatype.Procedure.isAppointmentRequest(Procedure.java:260)
art/runtime/runtime.cc:419] at com.hcs.orc.data.odb.ProcedureComparator.compare(ProcedureComparator.java:83)
art/runtime/runtime.cc:419] at com.hcs.orc.data.odb.ProcedureComparator.compare(ProcedureComparator.java:32)
art/runtime/runtime.cc:419] at java.util.TimSort.countRunAndMakeAscending(TimSort.java:360)
art/runtime/runtime.cc:419] at java.util.TimSort.sort(TimSort.java:220)
art/runtime/runtime.cc:419] at java.util.Arrays.sort(Arrays.java:1450)
art/runtime/runtime.cc:419] at java.util.Collections.sort(Collections.java:243)
art/runtime/runtime.cc:419] at com.hcs.orc.data.IndexedVector.sort(IndexedVector.java:216)
art/runtime/runtime.cc:419] at com.hcs.orc.data.odb.ProcedureDBLogic.sort(ProcedureDBLogic.java:61)
art/runtime/runtime.cc:419] at com.hcs.android.orc.service.datatype.Procedure$DB.sort(Procedure.java:583)
art/runtime/runtime.cc:419] at com.hcs.android.orc.service.data.ObjectDBSet.publishChangesComplete(ObjectDBSet.java:212)
art/runtime/runtime.cc:419] - locked <0x08c86602> (a com.hcs.android.orc.service.data.ObjectDBSet)
art/runtime/runtime.cc:419] at com.hcs.android.orc.service.message.DataMessageHandler.handle(DataMessageHandler.java:77)
art/runtime/runtime.cc:419] at com.hcs.android.orc.service.message.MessageProcessor.processMessage(MessageProcessor.java:119)
art/runtime/runtime.cc:419] at com.hcs.android.orc.service.message.MessageProcessor.work(MessageProcessor.java:95)
art/runtime/runtime.cc:419] at com.hcs.util.OAThread.run(OAThread.java:45)
art/runtime/runtime.cc:419]
art/runtime/runtime.cc:419] "Thread-8" prio=5 tid=25 Native
art/runtime/runtime.cc:419] | group="" sCount=1 dsCount=0 obj=0x12fa7d30 self=0xde363700
art/runtime/runtime.cc:419] | sysTid=11075 nice=0 cgrp=default sched=0/0 handle=0xc3d71920
art/runtime/runtime.cc:419] | state=S schedstat=( 0 0 0 ) utm=4210 stm=328 core=0 HZ=100
art/runtime/runtime.cc:419] | stack=0xc3c6f000-0xc3c71000 stackSize=1038KB
art/runtime/runtime.cc:419] | held mutexes=
art/runtime/runtime.cc:419] kernel: __switch_to+0x80/0x8c
art/runtime/runtime.cc:419] kernel: futex_wait_queue_me+0xe0/0x144
art/runtime/runtime.cc:419] kernel: futex_wait+0xe8/0x1d8
art/runtime/runtime.cc:419] kernel: do_futex+0xc8/0x860
art/runtime/runtime.cc:419] kernel: compat_SyS_futex+0xc8/0x144
art/runtime/runtime.cc:419] kernel: __sys_trace+0x48/0x4c
art/runtime/runtime.cc:419] native: #00 pc 00017530 /system/lib/libc.so (syscall+28)
art/runtime/runtime.cc:419] native: #01 pc 00076bbf /system/lib/libmedia.so (_ZN7android11ClientProxy12obtainBufferEPNS_5Proxy6BufferEPK8timespecPS4_+554)
art/runtime/runtime.cc:419] native: #02 pc 000870d7 /system/lib/libmedia.so (_ZN7android11AudioRecord12obtainBufferEPNS0_6BufferEPK8timespecPS3_Pj+202)
art/runtime/runtime.cc:419] native: #03 pc 0008728b /system/lib/libmedia.so (_ZN7android11AudioRecord4readEPvjb+150)
art/runtime/runtime.cc:419] native: #04 pc 000b08df /system/lib/libandroid_runtime.so (???)
art/runtime/runtime.cc:419] native: #05 pc 004cf95f /system/framework/arm/boot-framework.oat (Java_android_media_AudioRecord_native_1read_1in_1short_1array___3SIIZ+122)
art/runtime/runtime.cc:419] at android.media.AudioRecord.native_read_in_short_array(Native method)
art/runtime/runtime.cc:419] at android.media.AudioRecord.read(AudioRecord.java:1243)
art/runtime/runtime.cc:419] at android.media.AudioRecord.read(AudioRecord.java:1197)
art/runtime/runtime.cc:419] at edu.cmu.pocketsphinx.SpeechRecognizer$RecognizerThread.run(SpeechRecognizer.java:344)
art/runtime/runtime.cc:419]
A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 10759 (android.orpanel)
Note: Removed some threads that were just waiting to get under the 30,000 char limit on StackOverFlow.
UPDATE 1
My question is not looking for work around (we can implement our own bounds checking, but do not do so because profiling several years ago showed that we needed to improve this code and this was a way to do it).
Instead, I'm looking for an explanation of how my code might be causing this problem (i.e. it is really my bug) or if it is a known Android bug.
I turns out it is an Android bug:
https://issuetracker.google.com/issues/116246633
Used bounds checking as a work around instead of relying on Android to properly throw an ArrayIndexOutOfBoundsException.